From 33e6220e432a845d7193c19ceb298d0d875c8a3d Mon Sep 17 00:00:00 2001 From: Alf Hammerseth Date: Sat, 16 Nov 2019 21:13:45 +0100 Subject: [PATCH] add comment cleanup and add globals --- .jshintrc | 4 + package-lock.json | 3970 +++++++++++++++------ package.json | 47 +- server/app.js | 57 +- server/apps/admin.js | 71 +- server/apps/client.js | 56 +- server/apps/genre_generator.js | 58 +- server/config/mongo_config.example.js | 2 +- server/handlers/aggregates.js | 1 - server/handlers/chat.js | 4 + server/handlers/db.js | 25 +- server/handlers/frontpage.js | 5 + server/handlers/functions.js | 4 + server/handlers/io.js | 4 + server/handlers/list.js | 9 +- server/handlers/list_change.js | 4 + server/handlers/list_settings.js | 5 + server/handlers/search.js | 11 +- server/handlers/suggestions.js | 4 + server/pm2.js | 82 - server/public/assets/js/channel.js | 138 +- server/public/assets/js/embed.js | 97 +- server/public/assets/js/functions.js | 246 +- server/public/assets/js/hostcontroller.js | 31 +- server/public/assets/js/listeners.js | 575 ++- server/routing/admin/api.js | 434 ++- server/routing/client/api.js | 983 ++--- server/routing/client/icons_routing.js | 17 +- server/routing/client/router.js | 75 +- server/settings/globals.js | 6 + server/start.js | 7 + 31 files changed, 4480 insertions(+), 2552 deletions(-) create mode 100644 .jshintrc delete mode 100644 server/pm2.js create mode 100644 server/settings/globals.js create mode 100644 server/start.js diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 00000000..b548a2e6 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,4 @@ +{ + "esversion": 6, + "moz": true +} diff --git a/package-lock.json b/package-lock.json index 154f53e7..7f076c4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,855 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.2.tgz", + "integrity": "sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.2", + "@babel/helpers": "^7.7.0", + "@babel/parser": "^7.7.2", + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.7.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz", + "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==", + "requires": { + "@babel/types": "^7.7.2", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz", + "integrity": "sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg==", + "dev": true, + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz", + "integrity": "sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz", + "integrity": "sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz", + "integrity": "sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ==", + "dev": true, + "requires": { + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz", + "integrity": "sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/types": "^7.7.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz", + "integrity": "sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-function-name": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz", + "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==", + "requires": { + "@babel/helper-get-function-arity": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz", + "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz", + "integrity": "sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==", + "dev": true, + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz", + "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==", + "dev": true, + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz", + "integrity": "sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw==", + "dev": true, + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz", + "integrity": "sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.7.0", + "@babel/helper-simple-access": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz", + "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==", + "dev": true, + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz", + "integrity": "sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.0", + "@babel/helper-wrap-function": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz", + "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.7.0", + "@babel/helper-optimise-call-expression": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz", + "integrity": "sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g==", + "dev": true, + "requires": { + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz", + "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-wrap-function": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz", + "integrity": "sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helpers": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.0.tgz", + "integrity": "sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g==", + "dev": true, + "requires": { + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz", + "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz", + "integrity": "sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz", + "integrity": "sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", + "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz", + "integrity": "sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz", + "integrity": "sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz", + "integrity": "sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz", + "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz", + "integrity": "sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.0", + "@babel/helper-define-map": "^7.7.0", + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-optimise-call-expression": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz", + "integrity": "sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz", + "integrity": "sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz", + "integrity": "sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.7.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz", + "integrity": "sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz", + "integrity": "sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz", + "integrity": "sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz", + "integrity": "sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", + "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz", + "integrity": "sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/preset-env": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.1.tgz", + "integrity": "sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.7.0", + "@babel/plugin-proposal-dynamic-import": "^7.7.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-syntax-top-level-await": "^7.7.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.7.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.6.3", + "@babel/plugin-transform-classes": "^7.7.0", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.6.0", + "@babel/plugin-transform-dotall-regex": "^7.7.0", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.7.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.7.0", + "@babel/plugin-transform-modules-systemjs": "^7.7.0", + "@babel/plugin-transform-modules-umd": "^7.7.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.0", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.7.0", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.6.2", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.7.0", + "@babel/types": "^7.7.1", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/register": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.0.tgz", + "integrity": "sha512-HV3GJzTvSoyOMWGYn2TAh6uL6g+gqKTgEZ99Q3+X9UURT1VPT/WcU46R61XftIc5rXytcOHZ4Z0doDlsjPomIg==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, + "@babel/template": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", + "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/traverse": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz", + "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.2", + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "@babel/parser": "^7.7.2", + "@babel/types": "^7.7.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "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.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz", + "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, "@gulp-sourcemaps/identity-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", @@ -25,26 +874,343 @@ "through2": "^2.0.3" } }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@jimp/bmp": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.8.5.tgz", + "integrity": "sha512-o/23j1RODQGGjvb2xg+9ZQCHc9uXa5XIoJuXHN8kh8AJBGD7JZYiHMwNHaxJRJvadimCKUeA5udZUJAoaPwrYg==", "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "@jimp/utils": "^0.8.5", + "bmp-js": "^0.1.0", + "core-js": "^2.5.7" + }, + "dependencies": { + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + } + } + }, + "@jimp/core": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.8.5.tgz", + "integrity": "sha512-Jto1IdL5HYg7uE15rpQjK6dfZJ6d6gRjUsVCPW50nIfXgWizaTibFEov90W9Bj+irwKrX2ntG3e3pZUyOC0COg==", + "requires": { + "@jimp/utils": "^0.8.5", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "core-js": "^2.5.7", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + } + } + }, + "@jimp/custom": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.8.5.tgz", + "integrity": "sha512-hS4qHOcOIL+N93IprsIhFgr8F4XnC2oYd+lRaOKEOg3ptS2vQnceSTtcXsC0//mhq8AV6lNjpbfs1iseEZuTqg==", + "requires": { + "@jimp/core": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/gif": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.8.5.tgz", + "integrity": "sha512-Mj8jmv4AS76OY+Hx/Xoyihj02SUZ2ELk+O5x89pODz1+NeGtSWHHjZjnSam9HYAjycvVI/lGJdk/7w0nWIV/yQ==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.8.5.tgz", + "integrity": "sha512-7kjTY0BiCpwRywk+oPfpLto7cLI+9G0mf4N1bv1Hn+VLQwcXFy2fHyl4qjqLbbY6u4cyZgqN+R8Pg6GRRzv0kw==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7", + "jpeg-js": "^0.3.4" + }, + "dependencies": { + "jpeg-js": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.6.tgz", + "integrity": "sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw==" + } + } + }, + "@jimp/plugin-blit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.8.5.tgz", + "integrity": "sha512-r8Z1CwazaJwZCRbucQgrfprlGyH91tX7GubUsbWr+zy5/dRJAAgaPj/hcoHDwbh3zyiXp5BECKKzKW0x4reL4w==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-blur": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.8.5.tgz", + "integrity": "sha512-UH5ywpV4YooUh9HXEsrNKDtojLCvIAAV0gywqn8EQeFyzwBJyXAvRNARJp7zr5OPLr9uGXkRLDCO9YyzdlXZng==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-color": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.8.5.tgz", + "integrity": "sha512-7XHqcTQ8Y1zto1b9P1y8m1dzSjnOpBsD9OZG0beTpeJ5bgPX+hF5ZLmvcM6c5ljkINw5EUF1it07BYbkCxiGQA==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.8.5.tgz", + "integrity": "sha512-ZkiPFx9L0yITiKtYTYLWyBsSIdxo/NARhNPRZXyVF9HmTWSLDUw1c2c1uvETKxDZTAVK+souYT14DwFWWdhsYA==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-cover": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.8.5.tgz", + "integrity": "sha512-OdT4YAopLOhbhTUQV3R1v5ZZqIaUt3n3vJi/OfTbsak1t9UkPBVdmYPyhoont8zJdtdkF5dW16Ro1FTshytcww==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-crop": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.8.5.tgz", + "integrity": "sha512-E1Hb+gfu2k74Gkqh96apAyVljsP5MjCH4TY6lECAAEcYKGH/XRhz6lY2dSEjCYE7KtiqjTZzWwYkgAvkwojj9Q==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-displace": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.8.5.tgz", + "integrity": "sha512-fVgVYTS1HZzAXkg8Lg06PuirSUG5oXYaYYGL+3ZU4tmZn1pyZ+mZyfejpwtymETEYZnmymHoCT4xto19E/IRvA==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-dither": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.8.5.tgz", + "integrity": "sha512-KSj2y8E3yK7tldjT/8ejqAWw5HFBjtWW6QkcxfW7FdV4c/nsXZXDkMbhqMZ7FkDuSYoAPeWUFeddrH4yipC5iA==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-flip": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.8.5.tgz", + "integrity": "sha512-2QbGDkurPNAXZUeHLo/UA3tjh+AbAXWZKSdtoa1ArlASovRz8rqtA45YIRIkKrMH82TA3PZk8bgP2jaLKLrzww==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.8.5.tgz", + "integrity": "sha512-2zReC5GJcVAXtf3UgzFcHSYN277i02K9Yrhc1xJf3mti00s43uD++B5Ho7/mIo+HrntVvWhxqar7PARdq0lVIg==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-invert": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.8.5.tgz", + "integrity": "sha512-GyMXPGheHdS14xfDceuZ9hrGm6gE9UG3PfTEjQbJmHMWippLC6yf8kombSudJlUf8q72YYSSXsSFKGgkHa67vA==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-mask": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.8.5.tgz", + "integrity": "sha512-inD/++XO+MkmwXl9JGYQ8X2deyOZuq9i+dmugH/557p16B9Q6tvUQt5X1Yg5w7hhkLZ00BKOAJI9XoyCC1NFvQ==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-normalize": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.8.5.tgz", + "integrity": "sha512-8YRWJWBT4NoSAbPhnjQJXGeaeWVrJAlGDv39A54oNH8Ry47fHcE0EN6zogQNpBuM34M6hRnZl4rOv1FIisaWdg==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-print": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.8.5.tgz", + "integrity": "sha512-BviNpCiA/fEieOqsrWr1FkqyFuiG2izdyyg7zUqyeUTHPwqrTLvXO9cfP/ThG4hZpu5wMQ5QClWSqhZu1fAwxA==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.8.5.tgz", + "integrity": "sha512-gIdmISuNmZQ1QwprnRC5VXVWQfKIiWineVQGebpMAG/aoFOLDXrVl939Irg7Fb/uOlSFTzpAbt1zpJ8YG/Mi2w==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-rotate": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.8.5.tgz", + "integrity": "sha512-8T9wnL3gb+Z0ogMZmtyI6h3y7TuqW2a5SpFbzFUVF+lTZoAabXjEfX3CAozizCLaT+Duc5H2FJVemAHiyr+Dbw==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-scale": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.8.5.tgz", + "integrity": "sha512-G+CDH9s7BsxJ4b+mKZ5SsiXwTAynBJ+7/9SwZFnICZJJvLd79Tws6VPXfSaKJZuWnGIX++L8jTGmFORCfLNkdg==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7" + } + }, + "@jimp/plugins": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.8.5.tgz", + "integrity": "sha512-52na0wqfQ3uItIA+C9cJ1EXffhSmABgK7ETClDseUh9oGtynHzxZ97smnFf1ydLjXLrF89Gt+YBxWLyiBGgiZQ==", + "requires": { + "@jimp/plugin-blit": "^0.8.5", + "@jimp/plugin-blur": "^0.8.5", + "@jimp/plugin-color": "^0.8.5", + "@jimp/plugin-contain": "^0.8.5", + "@jimp/plugin-cover": "^0.8.5", + "@jimp/plugin-crop": "^0.8.5", + "@jimp/plugin-displace": "^0.8.5", + "@jimp/plugin-dither": "^0.8.5", + "@jimp/plugin-flip": "^0.8.5", + "@jimp/plugin-gaussian": "^0.8.5", + "@jimp/plugin-invert": "^0.8.5", + "@jimp/plugin-mask": "^0.8.5", + "@jimp/plugin-normalize": "^0.8.5", + "@jimp/plugin-print": "^0.8.5", + "@jimp/plugin-resize": "^0.8.5", + "@jimp/plugin-rotate": "^0.8.5", + "@jimp/plugin-scale": "^0.8.5", + "core-js": "^2.5.7", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.8.5.tgz", + "integrity": "sha512-zT89ucu8I2rsD3FIMIPLgr1OyKn4neD+5umwD3MY8AOB8+6tX5bFtnmTm3FzGJaJuibkK0wFl87eiaxnb+Megw==", + "requires": { + "@jimp/utils": "^0.8.5", + "core-js": "^2.5.7", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.8.5.tgz", + "integrity": "sha512-Z7uzDcbHuwDg+hy2+UJQ2s5O6sqYXmv6H1fmSf/2dxBrlGMzl8yTc2/BxLrGREeoidDDMcKmXYGAOp4uCsdJjw==", + "requires": { + "core-js": "^2.5.7", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.8.5.tgz", + "integrity": "sha512-XUvpyebZGd1vyFiJyxUT4H9A3mKD7MV2MxjXnay3fNTrcow0UJJspmFw/w+G3TP/1dgrVC4K++gntjR6QWTzvg==", + "requires": { + "@jimp/bmp": "^0.8.5", + "@jimp/gif": "^0.8.5", + "@jimp/jpeg": "^0.8.5", + "@jimp/png": "^0.8.5", + "@jimp/tiff": "^0.8.5", + "core-js": "^2.5.7", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.8.5.tgz", + "integrity": "sha512-D3+H4BiopDkhUKvKkZTPPJ53voqOkfMuk3r7YZNcLtXGLkchjjukC4056lNo7B0DzjBgowTYsQM3JjKnYNIYeg==", + "requires": { + "core-js": "^2.5.7" + } + }, + "@types/bson": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz", + "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/mongodb": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.3.10.tgz", + "integrity": "sha512-0irlIjqs0UVcs+1ih7qdA9Rs4gkN9hBX7PI6IBWYu/kcMQ52L+oLW19gKT8wBJD2uMBkgT4mVKDmEo6ygObnHA==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "12.12.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.8.tgz", + "integrity": "sha512-XLla8N+iyfjvsa0KKV+BP/iGSoTmwxsu5Ci5sM33z9TjohF72DEz95iNvD6pPmemvbQgxAv/909G73gUn8QR7w==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.42.0" } } } @@ -92,11 +1258,24 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -124,6 +1303,14 @@ } } }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "requires": { + "default-require-extensions": "^2.0.0" + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -132,8 +1319,7 @@ "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" }, "are-we-there-yet": { "version": "1.1.5", @@ -144,6 +1330,14 @@ "readable-stream": "^2.0.6" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -284,35 +1478,27 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async-done": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", - "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.2", - "process-nextick-args": "^1.0.7", + "process-nextick-args": "^2.0.0", "stream-exhaust": "^1.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - } } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "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-settle": { "version": "1.0.0", @@ -343,6 +1529,15 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, "bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", @@ -366,9 +1561,9 @@ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, "bad-words": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/bad-words/-/bad-words-1.6.5.tgz", - "integrity": "sha512-KzDrzFtzS8Z+v4I+KuanePuaj7g6aRms2WYQOt7n+UugfqMPheYS7zcyTypokxMno2Ss6xfo062ya1aVrviB2g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bad-words/-/bad-words-3.0.3.tgz", + "integrity": "sha512-To+nGz+U8SpEQieZ2kSadY/1hVO88UXAslCJuTgLjDOuGrs/tNW2BYwl0fctxcRLooe0nzYN1pGzgvRIrd0BeA==", "requires": { "badwords-list": "^1.0.0" } @@ -443,10 +1638,15 @@ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, "bcrypt-nodejs": { "version": "0.0.3", @@ -476,9 +1676,9 @@ "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "bl": { @@ -506,32 +1706,44 @@ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "bmp-js": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=" }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } } }, "bowser": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.6.1.tgz", - "integrity": "sha512-hySGUuLhi0KetfxPZpuJOsjM0kRvCiCgPBygBkzGzJNsq/nbJmaO8QJc6xlWfeFFnMvtd/LeKkhDJGVrmVobUA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.7.0.tgz", + "integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w==" }, "brace-expansion": { "version": "1.1.11", @@ -571,10 +1783,30 @@ } } }, + "browserslist": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz", + "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001004", + "electron-to-chromium": "^1.3.295", + "node-releases": "^1.1.38" + } + }, "bson": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", - "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", + "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg==" + }, + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } }, "buffer-equal": { "version": "0.0.1", @@ -586,15 +1818,10 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "cache-base": { "version": "1.0.1", @@ -613,6 +1840,17 @@ "unset-value": "^1.0.0" } }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + } + }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", @@ -629,15 +1867,31 @@ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, + "caniuse-lite": { + "version": "1.0.30001010", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001010.tgz", + "integrity": "sha512-RA5GH9YjFNea4ZQszdWgh2SC+dpLiRAg4VDQS2b5JRI45OxmbGrYocYHTa9x0bKMQUE7uvHkNPNffUr+pCxSGw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -651,7 +1905,7 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.0" + "upath": "^1.1.1" }, "dependencies": { "normalize-path": { @@ -709,11 +1963,21 @@ "wrap-ansi": "^2.0.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, "clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, "cloneable-readable": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", @@ -784,6 +2048,19 @@ "object-visit": "^1.0.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -796,6 +2073,31 @@ "integrity": "sha1-KVHbZ8ssInJU877macVi11NNQ+o=", "requires": { "jimp": "^0.2.21" + }, + "dependencies": { + "jimp": { + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", + "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", + "requires": { + "bignumber.js": "^2.1.0", + "bmp-js": "0.0.3", + "es6-promise": "^3.0.2", + "exif-parser": "^0.1.9", + "file-type": "^3.1.0", + "jpeg-js": "^0.2.0", + "load-bmfont": "^1.2.3", + "mime": "^1.3.4", + "mkdirp": "0.5.1", + "pixelmatch": "^4.0.0", + "pngjs": "^3.0.0", + "read-chunk": "^1.0.1", + "request": "^2.65.0", + "stream-to-buffer": "^0.1.0", + "tinycolor2": "^1.1.2", + "url-regex": "^3.0.0" + } + } } }, "combined-stream": { @@ -811,6 +2113,11 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -827,31 +2134,31 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", - "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "requires": { - "mime-db": ">= 1.34.0 < 2" + "mime-db": ">= 1.40.0 < 2" } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, "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==" + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" } } }, @@ -870,38 +2177,6 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "concat-with-sourcemaps": { @@ -922,11 +2197,11 @@ } }, "connect-mongo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-2.0.3.tgz", - "integrity": "sha512-Vs+QZ/6X6gbCrP1Ls7Oh/wlyY6pgpbPSrUKF5yRT+zd+4GZPNbjNquxquZ+Clv2+03HBXE7T4lVM0PUcaBhihg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-3.1.2.tgz", + "integrity": "sha512-UBHOk+T3pj1nTDIb75y/m45sWDt2j9B9nG7C4RkvxGUmK7nA8kAH9lD9FgK06MrKiBTwV25rzXPbGk9yTURzfw==", "requires": { - "mongodb": "^2.0.36" + "mongodb": "^3.1.0" } }, "console-control-strings": { @@ -935,9 +2210,12 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-security-policy-builder": { "version": "2.1.0", @@ -992,6 +2270,29 @@ "is-plain-object": "^2.0.1" } }, + "core-js": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", + "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" + }, + "core-js-compat": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.1.tgz", + "integrity": "sha512-YdeJI26gLc0CQJ9asLE5obEgBz2I0+CIgnoTbS2T0d5IPQw/OCgCIFR527RmpduxjrB3gSEHoGOCTq9sigOyfw==", + "dev": true, + "requires": { + "browserslist": "^4.7.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1013,10 +2314,33 @@ } } }, - "crc": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", - "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } }, "css": { "version": "2.2.4", @@ -1091,8 +2415,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -1129,6 +2452,21 @@ } } }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "requires": { + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, "default-resolution": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", @@ -1250,38 +2588,6 @@ "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "each-props": { @@ -1314,6 +2620,17 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "electron-to-chromium": { + "version": "1.3.306", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.306.tgz", + "integrity": "sha512-frDqXvrIROoYvikSKTIKbHbzO6M3/qC6kCIt/1FOa9kALe++c4VAJnwjSFvf1tYLEUsP2n9XZ4XSCyqc3l7A/A==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -1328,37 +2645,42 @@ } }, "engine.io": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", - "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.0.tgz", + "integrity": "sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w==", "requires": { "accepts": "~1.3.4", - "base64id": "1.0.0", + "base64id": "2.0.0", "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~6.1.0" + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "^7.1.2" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "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-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", - "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", + "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", @@ -1369,19 +2691,32 @@ }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" } } } }, "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", @@ -1394,11 +2729,37 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "es5-ext": { "version": "0.10.48", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.48.tgz", @@ -1409,6 +2770,11 @@ "next-tick": "1" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", @@ -1449,6 +2815,21 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1523,80 +2904,101 @@ "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, "express-handlebars": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.2.tgz", - "integrity": "sha512-rPaSqR8xPnSqfvWvI8Mhtn7nifaMmySq6yhWkjH07Ks/nuDaRngJyf7eDN2I7PBkNVdZHf0Bz+1rY1yrZFdx8g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.1.0.tgz", + "integrity": "sha512-7QlaXnSREMmN5P2o4gmpUZDfJlLtfBka9d6r7/ccXaU7rPp76odw9YYtwZYdIiha2JqwiaG6o2Wu6NZJQ0u7Fg==", "requires": { "glob": "^7.1.3", "graceful-fs": "^4.1.2", - "handlebars": "^4.0.13", + "handlebars": "^4.1.2", "object.assign": "^4.1.0", "promise": "^8.0.2" } }, "express-recaptcha": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/express-recaptcha/-/express-recaptcha-3.0.1.tgz", - "integrity": "sha1-b/a25u1D5u94ZD9W46qP/igDlMg=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/express-recaptcha/-/express-recaptcha-5.0.1.tgz", + "integrity": "sha512-nvPctkHtQoKuigPnVMnAyO8IRDPN4gmIugRq921FWS88liM/3Cd3XRx618pXCsZfFl7pEQkzfx0F6d03RDnu9A==" }, "express-session": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", - "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", "requires": { - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "crc": "3.4.4", "debug": "2.6.9", - "depd": "~1.1.1", - "on-headers": "~1.0.1", - "parseurl": "~1.3.2", - "uid-safe": "~2.1.5", - "utils-merge": "1.0.1" + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } } }, "extend": { @@ -1694,13 +3096,14 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "requires": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", "time-stamp": "^1.0.0" } }, @@ -1724,9 +3127,9 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "feature-policy": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", - "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.4.0.tgz", + "integrity": "sha512-SGAI4zDethorgbUdtHuL74gnIcjfHA4bZDgocR7SIz/Zu1sknKAHciaCbiClivfiW7he2V3HZ64UvE0/3Ai5mA==" }, "file-type": { "version": "3.9.0", @@ -1757,24 +3160,27 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -1788,32 +3194,21 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } } }, "fined": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", - "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, "requires": { "expand-tilde": "^2.0.2", @@ -1837,46 +3232,6 @@ "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "for-each": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", - "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", - "requires": { - "is-function": "~1.0.0" } }, "for-in": { @@ -1894,6 +3249,15 @@ "for-in": "^1.0.1" } }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1964,14 +3328,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -1983,7 +3347,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2004,12 +3369,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2024,17 +3391,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2043,12 +3413,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -2151,7 +3521,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2163,6 +3534,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2177,6 +3549,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2184,12 +3557,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2208,29 +3583,30 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -2258,13 +3634,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -2288,7 +3664,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2300,6 +3677,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2385,7 +3763,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2400,7 +3779,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -2421,6 +3800,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2440,6 +3820,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2483,12 +3864,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -2538,9 +3921,9 @@ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2587,38 +3970,6 @@ "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "glob-watcher": { @@ -2668,6 +4019,11 @@ "which": "^1.2.14" } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, "glogg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", @@ -2683,21 +4039,21 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "gulp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", - "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "dev": true, "requires": { - "glob-watcher": "^5.0.0", - "gulp-cli": "^2.0.0", - "undertaker": "^1.0.0", + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", "vinyl-fs": "^3.0.0" }, "dependencies": { "gulp-cli": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz", - "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", + "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", "dev": true, "requires": { "ansi-colors": "^1.0.1", @@ -2710,7 +4066,7 @@ "gulplog": "^1.0.0", "interpret": "^1.1.0", "isobject": "^3.0.1", - "liftoff": "^2.5.0", + "liftoff": "^3.1.0", "matchdep": "^2.0.0", "mute-stdout": "^1.0.0", "pretty-hrtime": "^1.0.0", @@ -2843,45 +4199,15 @@ } }, "gulp-uglify-es": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/gulp-uglify-es/-/gulp-uglify-es-1.0.4.tgz", - "integrity": "sha512-UMRufZsBmQizCYpftutaiVoLswpbzFEfY90EJLU4YlTgculeHnanb794s88TMd5tpCZVC638sAX6JrLVYTP/Wg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-uglify-es/-/gulp-uglify-es-2.0.0.tgz", + "integrity": "sha512-00KkawzjWdjPo1YfD1FXKijVxZkyr6YSwJ2cJQgD1fNKFZCFPNjGc5sTyzyW8tZns8FmZafgHMrg7LUDNvIQ5A==", "requires": { "o-stream": "^0.2.2", "plugin-error": "^1.0.1", - "terser": "^3.7.5", - "vinyl": "^2.1.0", + "terser": "^4.3.9", + "vinyl": "^2.2.0", "vinyl-sourcemaps-apply": "^0.2.1" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } } }, "gulplog": { @@ -2894,9 +4220,9 @@ } }, "handlebars": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.0.tgz", - "integrity": "sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.2.tgz", + "integrity": "sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -2918,6 +4244,14 @@ "har-schema": "^2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, "has-binary2": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", @@ -2938,6 +4272,11 @@ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, "has-gulplog": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", @@ -2989,10 +4328,18 @@ } } }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "requires": { + "is-stream": "^1.0.1" + } + }, "helmet": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.1.tgz", - "integrity": "sha512-IC/54Lxvvad2YiUdgLmPlNFKLhNuG++waTF5KPYq/Feo3NNhqMFbcLAlbVkai+9q0+4uxjxGPJ9bNykG+3zZNg==", + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.2.tgz", + "integrity": "sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.2.0", @@ -3001,7 +4348,7 @@ "feature-policy": "0.3.0", "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.9.2", + "helmet-csp": "2.9.4", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", @@ -3020,11 +4367,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" - }, - "referrer-policy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", - "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" } } }, @@ -3034,11 +4376,11 @@ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" }, "helmet-csp": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.2.tgz", - "integrity": "sha512-Lt5WqNfbNjEJ6ysD4UNpVktSyjEKfU9LVJ1LaFmPfYseg/xPealPfgHhtqdAdjPDopp5zbg/VWCyp4cluMIckw==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.4.tgz", + "integrity": "sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg==", "requires": { - "bowser": "^2.6.1", + "bowser": "^2.7.0", "camelize": "1.0.0", "content-security-policy-builder": "2.1.0", "dasherize": "2.0.0" @@ -3061,8 +4403,7 @@ "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "hpkp": { "version": "2.0.0", @@ -3085,14 +4426,15 @@ } }, "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, "http-signature": { @@ -3106,18 +4448,28 @@ } }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "ienoopen": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==" }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -3130,13 +4482,6 @@ "requires": { "once": "^1.3.0", "wrappy": "1" - }, - "dependencies": { - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } } }, "inherits": { @@ -3155,6 +4500,15 @@ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -3172,9 +4526,9 @@ "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "is-absolute": { "version": "1.0.0", @@ -3209,8 +4563,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-binary-path": { "version": "1.0.1", @@ -3227,6 +4580,11 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -3247,6 +4605,11 @@ } } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -3292,9 +4655,9 @@ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3339,6 +4702,14 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -3348,6 +4719,19 @@ "is-unc-path": "^1.0.0" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3388,8 +4772,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -3401,27 +4784,105 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "jimp": { - "version": "0.2.28", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", - "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "requires": { - "bignumber.js": "^2.1.0", - "bmp-js": "0.0.3", - "es6-promise": "^3.0.2", - "exif-parser": "^0.1.9", - "file-type": "^3.1.0", - "jpeg-js": "^0.2.0", - "load-bmfont": "^1.2.3", - "mime": "^1.3.4", - "mkdirp": "0.5.1", - "pixelmatch": "^4.0.0", - "pngjs": "^3.0.0", - "read-chunk": "^1.0.1", - "request": "^2.65.0", - "stream-to-buffer": "^0.1.0", - "tinycolor2": "^1.1.2", - "url-regex": "^3.0.0" + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "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.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "requires": { + "handlebars": "^4.1.2" + } + }, + "jimp": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.8.5.tgz", + "integrity": "sha512-BW7t/+TCgKpqZw/wHFwqF/A/Tyk43RmzRHyMBdqfOepqunUrajt0RTqowdWyFo4CS2FmD8pFiYfefWjpXFWrCA==", + "requires": { + "@jimp/custom": "^0.8.5", + "@jimp/plugins": "^0.8.5", + "@jimp/types": "^0.8.5", + "core-js": "^2.5.7", + "regenerator-runtime": "^0.13.3" } }, "jpeg-js": { @@ -3429,12 +4890,42 @@ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=" }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -3456,6 +4947,23 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -3474,9 +4982,9 @@ "dev": true }, "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, "kind-of": { "version": "6.0.2", @@ -3501,38 +5009,6 @@ "dev": true, "requires": { "readable-stream": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "lcid": { @@ -3554,13 +5030,13 @@ } }, "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", "dev": true, "requires": { "extend": "^3.0.0", - "findup-sync": "^2.0.0", + "findup-sync": "^3.0.0", "fined": "^1.0.1", "flagged-respawn": "^1.0.0", "is-plain-object": "^2.0.4", @@ -3570,15 +5046,16 @@ } }, "load-bmfont": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.3.0.tgz", - "integrity": "sha1-u358cQ3mvK/LE8s7jIHgwBMey8k=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", + "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", "requires": { "buffer-equal": "0.0.1", "mime": "^1.3.4", "parse-bmfont-ascii": "^1.0.3", "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.0", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", "xhr": "^2.0.1", "xtend": "^4.0.0" } @@ -3596,11 +5073,50 @@ "strip-bom": "^2.0.0" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", @@ -3609,6 +5125,22 @@ "es5-ext": "~0.10.2" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", @@ -3658,6 +5190,29 @@ "micromatch": "^3.0.4", "resolve": "^1.4.0", "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "media-typer": { @@ -3691,6 +5246,14 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "requires": { + "source-map": "^0.6.1" + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -3723,9 +5286,9 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" }, "mime-types": { "version": "2.1.20", @@ -3805,103 +5368,39 @@ } }, "mongodb": { - "version": "2.2.36", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", - "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.4.tgz", + "integrity": "sha512-6fmHu3FJTpeZxacJcfjUGIP3BSteG0l2cxLkSrf1nnnS1OrlnVGiP9P/wAC4aB6dM6H4vQ2io8YDjkuPkje7AA==", "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.20", - "readable-stream": "2.2.7" - }, - "dependencies": { - "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "requires": { - "buffer-shims": "~1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "mongodb-core": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz", - "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==", - "requires": { - "bson": "~1.0.4", - "require_optional": "~1.0.0" + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" } }, "mongojs": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongojs/-/mongojs-2.6.0.tgz", - "integrity": "sha512-r6tj71DjYcaRTi2jpa+CA6Iq72cTZclB2JKy+Zub+0JPTEq/l2plsAYfF2eHqSYBtZbKNcObvhGYk9E9UKZWJg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mongojs/-/mongojs-3.1.0.tgz", + "integrity": "sha512-aXJ4xfXwx9s1cqtKTZ24PypXiWhIgvgENObQzCGbV4QBxEVedy3yuErhx6znk959cF2dOzL2ClgXJvIhfgkpIQ==", "requires": { "each-series": "^1.0.0", - "mongodb": "^2.2.31", + "mongodb": "^3.3.2", + "nyc": "^14.1.1", "once": "^1.4.0", "parse-mongo-url": "^1.1.1", - "readable-stream": "^2.3.3", - "thunky": "^1.0.2", - "to-mongodb-core": "^2.0.0", - "xtend": "^4.0.1" + "readable-stream": "^3.4.0", + "thunky": "^1.1.0", + "to-mongodb-core": "^2.0.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } @@ -3912,66 +5411,27 @@ "integrity": "sha1-Z3YjmDlByAOPyBz88lw+425iO4s=" }, "mongoose": { - "version": "5.4.18", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.4.18.tgz", - "integrity": "sha512-yiSd/1OYYfK9EuH6NFO/NnTD4AZPIpRY1i58xUssgCGsYDX3qEYcdgFeknB5OArMB1Ny3wwMW8xiip2I5pgszw==", + "version": "5.7.11", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.7.11.tgz", + "integrity": "sha512-KpXGBTXQTKfTlePpZMY+FBsk9wiyp2gzfph9AsLPfWleK1x2GJY+6xpKx2kKIgLustgNq16OOrqwlAOGUbv3kg==", "requires": { - "async": "2.6.1", - "bson": "~1.1.0", - "kareem": "2.3.0", - "mongodb": "3.1.13", - "mongodb-core": "3.1.11", + "bson": "~1.1.1", + "kareem": "2.3.1", + "mongodb": "3.3.4", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.1", - "mquery": "3.2.0", - "ms": "2.1.1", - "regexp-clone": "0.0.1", + "mpath": "0.6.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", "safe-buffer": "5.1.2", + "sift": "7.0.1", "sliced": "1.0.1" }, "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" - }, - "mongodb": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz", - "integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==", - "requires": { - "mongodb-core": "3.1.11", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz", - "integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==", - "requires": { - "bson": "^1.1.0", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mpath": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz", - "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg==" - }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -3980,28 +5440,28 @@ "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, + "mpath": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", + "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" + }, "mpromise": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" }, "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", + "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", "requires": { "bluebird": "3.5.1", "debug": "3.1.0", - "regexp-clone": "0.0.1", + "regexp-clone": "^1.0.0", "safe-buffer": "5.1.2", "sliced": "1.0.1" }, "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -4024,9 +5484,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, "optional": true }, @@ -4055,15 +5515,20 @@ "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -4087,10 +5552,33 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz", "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==" }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "1.1.40", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.40.tgz", + "integrity": "sha512-r4LPcC5b/bS8BdtWH1fbeK88ib/wg9aqmg6/s3ngNLn2Ewkn/8J6Iw3P9RTlfIAdSdvYvQl2thCY5Y+qTAQ2iQ==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "nodemailer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", - "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.3.1.tgz", + "integrity": "sha512-j0BsSyaMlyadEDEypK/F+xlne2K5m6wzPYMXS/yxKI0s7jmT1kBx6GEKRVbZmyYfKOsjkeC/TiMVDJBI/w5gMQ==" }, "noop-logger": { "version": "0.1.1", @@ -4101,7 +5589,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -4123,9 +5610,9 @@ "integrity": "sha1-lKR/XkzkrOHz1xsnxvg8cWM5PFI=" }, "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "requires": { "once": "^1.3.2" @@ -4147,6 +5634,152 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "nyc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", + "requires": { + "archy": "^1.0.0", + "caching-transform": "^3.0.2", + "convert-source-map": "^1.6.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.2.3", + "uuid": "^3.3.2", + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "o-stream": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/o-stream/-/o-stream-0.2.2.tgz", @@ -4198,10 +5831,15 @@ } } }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -4235,6 +5873,15 @@ "isobject": "^3.0.0" } }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", @@ -4264,6 +5911,11 @@ "make-iterator": "^1.0.0" } }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -4273,9 +5925,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, "once": { "version": "1.4.0", @@ -4308,40 +5960,13 @@ "dev": true, "requires": { "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -4351,6 +5976,43 @@ "lcid": "^1.0.0" } }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + }, "parse-bmfont-ascii": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", @@ -4362,9 +6024,9 @@ "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" }, "parse-bmfont-xml": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.3.tgz", - "integrity": "sha1-1rZqNxr9OcUAfZ8O6yYqTyzOe3w=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", "requires": { "xml-parse-from-string": "^1.0.0", "xml2js": "^0.4.5" @@ -4382,13 +6044,9 @@ } }, "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", - "requires": { - "for-each": "^0.3.2", - "trim": "0.0.1" - } + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" }, "parse-json": { "version": "2.2.0", @@ -4404,6 +6062,12 @@ "resolved": "https://registry.npmjs.org/parse-mongo-url/-/parse-mongo-url-1.1.1.tgz", "integrity": "sha1-ZiON9fjnwMjKTNlw1KtqE3PrdbU=" }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -4427,9 +6091,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { "version": "0.1.1", @@ -4482,8 +6146,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-root": { "version": "0.1.1", @@ -4526,6 +6189,11 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -4547,6 +6215,15 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pixelmatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", @@ -4555,6 +6232,24 @@ "pngjs": "^3.0.0" } }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, "plugin-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", @@ -4567,9 +6262,9 @@ } }, "pngjs": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.1.tgz", - "integrity": "sha512-ggXCTsqHRIsGMkHlCEhbHhUmNTA2r1lpkE0NL4Q9S8spkXbm4vE9TVmPso2AGYn90Gltdz8W5CyzhcIGg2Gejg==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" }, "posix-character-classes": { "version": "0.1.1", @@ -4621,6 +6316,12 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, "process": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", @@ -4632,22 +6333,27 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promise": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", - "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", "requires": { "asap": "~2.0.6" } }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, "psl": { "version": "1.1.29", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", @@ -4690,18 +6396,18 @@ "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, @@ -4772,38 +6478,6 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "rechoir": { @@ -4836,9 +6510,38 @@ "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" }, "referrer-policy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", - "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", + "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } }, "regex-not": { "version": "1.0.2", @@ -4851,9 +6554,54 @@ } }, "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "requires": { + "es6-error": "^4.0.1" + } }, "remove-bom-buffer": { "version": "3.0.0", @@ -4893,6 +6641,11 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, "replace-homedir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", @@ -4934,8 +6687,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "1.0.1", @@ -4950,20 +6702,12 @@ "requires": { "resolve-from": "^2.0.0", "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } } }, "resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -4980,7 +6724,7 @@ }, "resolve-from": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, "resolve-options": { @@ -5003,6 +6747,14 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -5023,9 +6775,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", "optional": true, "requires": { "sparse-bitfield": "^3.0.3" @@ -5034,7 +6786,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { "version": "5.6.0", @@ -5051,9 +6803,9 @@ } }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -5062,35 +6814,30 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -5122,9 +6869,14 @@ } }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" }, "signal-exit": { "version": "3.0.2", @@ -5265,16 +7017,16 @@ } }, "socket.io": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", - "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", + "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", "requires": { "debug": "~4.1.0", - "engine.io": "~3.3.1", + "engine.io": "~3.4.0", "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.2.0", - "socket.io-parser": "~3.3.0" + "socket.io-client": "2.3.0", + "socket.io-parser": "~3.4.0" }, "dependencies": { "debug": { @@ -5286,9 +7038,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -5298,16 +7050,16 @@ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" }, "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", "requires": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.3.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", @@ -5319,37 +7071,77 @@ }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "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": "^2.1.1" } }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "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.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", + "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + }, + "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" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -5383,19 +7175,12 @@ } }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "source-map-url": { @@ -5418,11 +7203,23 @@ "memory-pager": "^1.0.2" } }, + "spawn-wrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", + "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -5431,14 +7228,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -5447,8 +7242,7 @@ "spdx-license-ids": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" }, "split-string": { "version": "3.1.0", @@ -5459,6 +7253,11 @@ "extend-shallow": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "sshpk": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", @@ -5551,6 +7350,24 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5586,6 +7403,14 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, "sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", @@ -5643,24 +7468,102 @@ } }, "terser": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.8.2.tgz", - "integrity": "sha512-FGSBXiBJe2TSXy6pWwXpY0YcEWEK35UKL64BBbxX3aHqM4Nj0RMqXvqBuoSGfyd80t8MKQ5JwYm5jRRGTSEFNg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz", + "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==", "requires": { - "commander": "~2.17.1", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "source-map-support": "~0.5.12" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" } } }, @@ -5743,9 +7646,9 @@ } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "time-stamp": { "version": "1.1.0", @@ -5762,6 +7665,11 @@ "next-tick": "1" } }, + "timm": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz", + "integrity": "sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==" + }, "tinycolor2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", @@ -5782,6 +7690,11 @@ "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", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, "to-mongodb-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-mongodb-core/-/to-mongodb-core-2.0.0.tgz", @@ -5838,6 +7751,11 @@ "through2": "^2.0.3" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -5847,11 +7765,6 @@ "punycode": "^1.4.1" } }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5867,12 +7780,22 @@ "optional": true }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + } } }, "typedarray": { @@ -5917,9 +7840,9 @@ "dev": true }, "undertaker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", - "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", + "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", "dev": true, "requires": { "arr-flatten": "^1.0.1", @@ -5939,6 +7862,34 @@ "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", "dev": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5952,9 +7903,9 @@ } }, "uniqid": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-5.0.3.tgz", - "integrity": "sha512-R2qx3X/LYWSdGRaluio4dYrPXAJACTqyUjuyXHoJLBUOIfmMcnYOyY2d6Y4clZcIz5lK6ZaI0Zzmm0cPfsIqzQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-5.1.0.tgz", + "integrity": "sha512-iBt38h8uFnbDFrRK4E7vdzjtynBii5aSwGZ27gle7xnbYSIZzJ5x5BqughgUvMNCZ1cMhtnpcF+w7XGbqm6d9Q==" }, "unique-stream": { "version": "2.3.1", @@ -6008,19 +7959,13 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true } } }, "upath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.1.tgz", - "integrity": "sha512-D0yetkpIOKiZQquxjM2Syvy48Y1DbZ0SWxgsZiwd9GCWRpc75vN8ytzem14WDSg+oiX6+Qt31FpiS/ExODCrLg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "urix": { @@ -6042,11 +7987,28 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6058,9 +8020,9 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8flags": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", - "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -6070,7 +8032,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -6097,6 +8058,19 @@ "extsprintf": "^1.2.0" } }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, "vinyl-fs": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", @@ -6120,70 +8094,6 @@ "value-or-function": "^3.0.0", "vinyl": "^2.0.0", "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } } }, "vinyl-sourcemap": { @@ -6199,40 +8109,6 @@ "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } } }, "vinyl-sourcemaps-apply": { @@ -6254,7 +8130,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -6293,12 +8168,27 @@ "strip-ansi": "^3.0.1" } }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "requires": { - "async-limiter": "~1.0.0" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz", + "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==", + "requires": { + "async-limiter": "^1.0.0" } }, "x-xss-protection": { @@ -6307,9 +8197,9 @@ "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" }, "xhr": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.1.tgz", - "integrity": "sha512-pAIU5vBr9Hiy5cpFIbPnwf0C18ZF86DBsZKrlsf87N5De/JbA6RJ83UP/cv+aljl4S40iRVMqP4pr4sF9Dnj0A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", "requires": { "global": "~4.3.0", "is-function": "^1.0.1", @@ -6323,18 +8213,19 @@ "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", + "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "util.promisify": "~1.0.0", + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=" + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xmlhttprequest-ssl": { "version": "1.5.5", @@ -6342,9 +8233,9 @@ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "3.2.1", @@ -6352,6 +8243,11 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, "yargs": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", diff --git a/package.json b/package.json index 5ac58cec..7375c492 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Zoff, the shared YouTube based radio services", "main": "server/app.js", "scripts": { - "start": "npm install --only=dev && npm install && $(npm bin)/gulp build && node server/app.js", + "start": "npm install --only=dev && npm install && $(npm bin)/gulp build && node server/start.js", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { @@ -20,45 +20,50 @@ "url": "https://github.com/zoff-music/zoff/issues" }, "devDependencies": { - "gulp": "^4.0.0", + "@babel/core": "^7.7.2", + "@babel/preset-env": "^7.7.1", + "@babel/register": "^7.7.0", + "@types/node": "^12.12.8", + "gulp": "^4.0.2", "gulp-concat": "^2.6.1", "gulp-uglify": "^3.0.2" }, "homepage": "https://github.com/zoff-music/zoff#readme", "dependencies": { - "bad-words": "^1.6.5", + "@types/mongodb": "^3.3.10", + "bad-words": "^3.0.3", "bcrypt-nodejs": "0.0.3", - "body-parser": "^1.18.3", + "body-parser": "^1.19.0", "color-thief-jimp": "^2.0.2", - "compression": "^1.7.3", - "connect-mongo": "^2.0.3", + "compression": "^1.7.4", + "connect-mongo": "^3.1.2", "cookie-parser": "^1.4.4", "cors": "^2.8.5", - "express": "^4.16.4", - "express-handlebars": "^3.0.2", - "express-recaptcha": "^3.0.1", - "express-session": "^1.15.6", + "express": "^4.17.1", + "express-handlebars": "^3.1.0", + "express-recaptcha": "^5.0.1", + "express-session": "^1.17.0", "farmhash": "^3.0.0", - "feature-policy": "^0.2.0", + "feature-policy": "^0.4.0", "gulp-clean-css": "^4.2.0", "gulp-sourcemaps": "^2.6.5", - "gulp-uglify-es": "^1.0.4", - "helmet": "^3.21.1", - "jimp": "^0.2.28", - "mongodb": "^2.2.36", - "mongojs": "^2.6.0", + "gulp-uglify-es": "^2.0.0", + "helmet": "^3.21.2", + "jimp": "^0.8.5", + "mongodb": "^3.3.4", + "mongojs": "^3.1.0", "mongojs-paginate": "^1.2.0", - "mongoose": "^5.4.18", + "mongoose": "^5.7.11", "mpromise": "^0.5.5", - "nodemailer": "^4.7.0", + "nodemailer": "^6.3.1", "passport": "^0.4.0", "passport-local": "^1.0.0", "redis": "^2.8.0", - "referrer-policy": "^1.1.0", + "referrer-policy": "^1.2.0", "request": "^2.88.0", - "socket.io": "^2.2.0", + "socket.io": "^2.3.0", "socket.io-redis": "^5.2.0", "sticky-session": "^1.1.2", - "uniqid": "5.0.3" + "uniqid": "5.1.0" } } diff --git a/server/app.js b/server/app.js index 1541fe66..3eca6db6 100644 --- a/server/app.js +++ b/server/app.js @@ -1,26 +1,25 @@ var cluster = require("cluster"), net = require("net"), path = require("path"), - //publicPath = path.join(__dirname, 'public'), http = require("http"), port = 8080, farmhash = require("farmhash"), uniqid = require("uniqid"), num_processes = require("os").cpus().length; -publicPath = path.join(__dirname, "public"); -pathThumbnails = __dirname; - try { var redis = require("redis"); - var client = redis.createClient({ host: "localhost", port: 6379 }); - client.on("error", function(err) { + var client = redis.createClient({ + host: "localhost", + port: 6379 + }); + client.on("error", function (err) { console.log("Couldn't connect to redis-server, assuming non-clustered run"); num_processes = 1; startSingle(false, false); client.quit(); }); - client.on("connect", function() { + client.on("connect", function () { startClustered(true); client.quit(); }); @@ -34,9 +33,9 @@ function startClustered(redis_enabled) { //Found https://stackoverflow.com/questions/40885592/use-node-js-cluster-with-socket-io-chat-application if (cluster.isMaster) { var workers = []; - var spawn = function(i) { + var spawn = function (i) { workers[i] = cluster.fork(); - workers[i].on("exit", function(code, signal) { + workers[i].on("exit", function (code, signal) { if (code == 1) { process.exit(1); return; @@ -50,8 +49,7 @@ function startClustered(redis_enabled) { spawn(i); } - var worker_index = function(ip, len) { - //console.log(ip); + var worker_index = function (ip, len) { var s = ""; if (ip !== undefined) { return farmhash.fingerprint32(ip) % len; @@ -66,11 +64,15 @@ function startClustered(redis_enabled) { }; var server = net - .createServer({ pauseOnConnect: true }, function(connection, a) { - var worker = - workers[worker_index(connection.address().address, num_processes)]; - worker.send("sticky-session:connection", connection); - }) + .createServer({ + pauseOnConnect: true + }, + function (connection, a) { + var worker = + workers[worker_index(connection.address().address, num_processes)]; + worker.send("sticky-session:connection", connection); + } + ) .listen(port); } else { startSingle(true, redis_enabled); @@ -112,14 +114,19 @@ function startSingle(clustered, redis_enabled) { if (redis_enabled) { var redis = require("socket.io-redis"); try { - socketIO.adapter(redis({ host: "localhost", port: 6379 })); + socketIO.adapter( + redis({ + host: "localhost", + port: 6379 + }) + ); } catch (e) { console.log("No redis-server to connect to.."); } } socketIO.listen(server); - process.on("message", function(message, connection) { + process.on("message", function (message, connection) { if (message !== "sticky-session:connection") { return; } @@ -136,12 +143,12 @@ function routingFunction(req, res, next) { var client = require("./apps/client.js"); var admin = require("./apps/admin.js"); try { - var url = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"] - : req.headers.host.split(":")[0]; - var subdomain = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"].split(".") - : req.headers.host.split(":")[0].split("."); + var url = req.headers["x-forwarded-host"] ? + req.headers["x-forwarded-host"] : + req.headers.host.split(":")[0]; + var subdomain = req.headers["x-forwarded-host"] ? + req.headers["x-forwarded-host"].split(".") : + req.headers.host.split(":")[0].split("."); if (subdomain.length > 1 && subdomain[0] == "admin") { admin(req, res, next); @@ -154,4 +161,4 @@ function routingFunction(req, res, next) { res.write("Bad request"); //write a response to the client res.end(); //end the response } -} +} \ No newline at end of file diff --git a/server/apps/admin.js b/server/apps/admin.js index fc96fbfd..b64cc551 100644 --- a/server/apps/admin.js +++ b/server/apps/admin.js @@ -1,8 +1,11 @@ var express = require("express"); var app = express(); -const path = require("path"); -const publicPath = path.join(__dirname + "", "../public"); +import { + publicPath, + pathThumbnails +} from "../settings/globals"; + var exphbs = require("express-handlebars"); var hbs = exphbs.create({ defaultLayout: publicPath + "/layouts/admin/main", @@ -11,12 +14,10 @@ var hbs = exphbs.create({ }); var passport = require("passport"); -var mpromise = require("mpromise"); var LocalStrategy = require("passport-local").Strategy; var mongoose = require("mongoose"); var mongo_db_cred = require(pathThumbnails + "/config/mongo_config.js"); var mongojs = require("mongojs"); -var db = mongojs(mongo_db_cred.config); var token_db = mongojs("tokens"); var bodyParser = require("body-parser"); var session = require("express-session"); @@ -30,7 +31,9 @@ mongoose.connect(url); app.engine("handlebars", hbs.engine); app.set("view engine", "handlebars"); -app.use(compression({ filter: shouldCompress })); +app.use(compression({ + filter: shouldCompress +})); function shouldCompress(req, res) { if (req.headers["x-no-compression"]) { @@ -44,7 +47,6 @@ function shouldCompress(req, res) { app.set("trust proxy", "127.0.0.1"); var bodyParser = require("body-parser"); -var cookieParser = require("cookie-parser"); var referrerPolicy = require("referrer-policy"); var helmet = require("helmet"); var featurePolicy = require("feature-policy"); @@ -52,13 +54,11 @@ app.use( featurePolicy({ features: { fullscreen: ["*"], - //vibrate: ["'none'"], payment: ["'none'"], microphone: ["'none'"], camera: ["'none'"], speaker: ["*"], syncXhr: ["'self'"] - //notifications: ["'self'"] } }) ); @@ -67,7 +67,9 @@ app.use( frameguard: false }) ); -app.use(referrerPolicy({ policy: "origin-when-cross-origin" })); +app.use(referrerPolicy({ + policy: "origin-when-cross-origin" +})); app.enable("view cache"); app.set("views", publicPath); app.use(bodyParser.json()); // to support JSON-encoded bodies @@ -92,43 +94,47 @@ app.use( app.use(passport.initialize()); app.use(passport.session()); // persistent login sessions -//app.use('/assets', express.static(publicPath + '/assets')); -passport.serializeUser(function(user, done) { +passport.serializeUser(function (user, done) { done(null, user.id); }); // used to deserialize the user -passport.deserializeUser(function(id, done) { - User.findById(id, function(err, user) { +passport.deserializeUser(function (id, done) { + User.findById(id, function (err, user) { done(err, user); }); }); passport.use( "local-signup", - new LocalStrategy( - { + new LocalStrategy({ // by default, local strategy uses username and password, we will override with username usernameField: "username", passwordField: "password", passReqToCallback: true // allows us to pass back the entire request to the callback }, - function(req, username, password, done) { + function (req, username, password, done) { // asynchronous // User.findOne wont fire unless data is sent back - process.nextTick(function() { + process.nextTick(function () { // find a user whose username is the same as the forms username // we are checking to see if the user trying to login already exists var token = req.body.token; token_db .collection("tokens") - .find({ token: token }, function(err, docs) { + .find({ + token: token + }, function (err, docs) { if (docs.length == 1) { token_db .collection("tokens") - .remove({ token: token }, function(err, docs) { - User.findOne({ username: username }, function(err, user) { + .remove({ + token: token + }, function (err, docs) { + User.findOne({ + username: username + }, function (err, user) { // if there are any errors, return the error if (err) return done(err); @@ -145,7 +151,7 @@ passport.use( newUser.password = newUser.generateHash(password); // save the user - newUser.save(function(err) { + newUser.save(function (err) { if (err) throw err; return done(null, newUser); }); @@ -163,19 +169,20 @@ passport.use( passport.use( "local-login", - new LocalStrategy( - { + new LocalStrategy({ // by default, local strategy uses username and password, we will override with email usernameField: "username", passwordField: "password", passReqToCallback: true // allows us to pass back the entire request to the callback }, - function(req, username, password, done) { + function (req, username, password, done) { // callback with email and password from our form // find a user whose email is the same as the forms email // we are checking to see if the user trying to login already exists - User.findOne({ username: username }, function(err, user) { + User.findOne({ + username: username + }, function (err, user) { // if there are any errors, return the error before anything else if (err) return done(err); @@ -211,7 +218,7 @@ app.post( }) ); -app.use("/login", isLoggedInTryingToLogIn, function(req, res) { +app.use("/login", isLoggedInTryingToLogIn, function (req, res) { var data = { where_get: "not_authenticated" }; @@ -219,7 +226,7 @@ app.use("/login", isLoggedInTryingToLogIn, function(req, res) { res.render("layouts/admin/not_authenticated", data); }); -app.use("/signup", isLoggedInTryingToLogIn, function(req, res) { +app.use("/signup", isLoggedInTryingToLogIn, function (req, res) { var data = { where_get: "not_authenticated" }; @@ -229,12 +236,12 @@ app.use("/signup", isLoggedInTryingToLogIn, function(req, res) { app.use("/", api); -app.use("/logout", function(req, res) { +app.use("/logout", function (req, res) { req.logout(); res.redirect("/login"); }); -app.use("/assets/admin/authenticated", function(req, res, next) { +app.use("/assets/admin/authenticated", function (req, res, next) { if (!req.isAuthenticated()) { res.sendStatus(403); return; @@ -244,7 +251,7 @@ app.use("/assets/admin/authenticated", function(req, res, next) { app.use("/assets", express.static(publicPath + "/assets")); -app.use("/", isLoggedIn, function(req, res) { +app.use("/", isLoggedIn, function (req, res) { var data = { where_get: "authenticated", year: new Date().getYear() + 1900 @@ -265,6 +272,4 @@ function isLoggedIn(req, res, next) { res.redirect("/login"); } -//app.listen(default_port); - -module.exports = app; +module.exports = app; \ No newline at end of file diff --git a/server/apps/client.js b/server/apps/client.js index 6df020a1..4b41594e 100755 --- a/server/apps/client.js +++ b/server/apps/client.js @@ -1,4 +1,8 @@ -VERSION = require(pathThumbnails + "/VERSION.js"); +import { + publicPath, + pathThumbnails, +} from "../settings/globals"; + var secure = false; var path = require("path"); try { @@ -7,18 +11,9 @@ try { "cert_config.js" )); var fs = require("fs"); - var privateKey = fs.readFileSync(cert_config.privateKey).toString(); - var certificate = fs.readFileSync(cert_config.certificate).toString(); - var ca = fs.readFileSync(cert_config.ca).toString(); - var credentials = { - key: privateKey, - cert: certificate, - ca: ca - }; secure = true; } catch (err) {} -var add = ""; var express = require("express"); var app = express(); var compression = require("compression"); @@ -31,21 +26,23 @@ var hbs = exphbs.create({ layoutsDir: publicPath + "/layouts/client", partialsDir: publicPath + "/partials", helpers: { - if_equal: function(a, b, opts) { + if_equal: function (a, b, opts) { if (a == b) { return opts.fn(this); } else { return opts.inverse(this); } }, - decodeString: function(s) { + decodeString: function (s) { if (s == undefined) return s; return Functions.decodeChannelName(s); } } }); var uniqid = require("uniqid"); -app.use(compression({ filter: shouldCompress })); +app.use(compression({ + filter: shouldCompress +})); function shouldCompress(req, res) { if (req.headers["x-no-compression"]) { @@ -68,17 +65,16 @@ var cookieParser = require("cookie-parser"); var referrerPolicy = require("referrer-policy"); var helmet = require("helmet"); var featurePolicy = require("feature-policy"); + app.use( featurePolicy({ features: { fullscreen: ["*"], - //vibrate: ["'none'"], payment: ["'none'"], microphone: ["'none'"], camera: ["'none'"], speaker: ["*"], syncXhr: ["'self'"] - //notifications: ["'self'"] } }) ); @@ -87,7 +83,9 @@ app.use( frameguard: false }) ); -app.use(referrerPolicy({ policy: "origin-when-cross-origin" })); +app.use(referrerPolicy({ + policy: "origin-when-cross-origin" +})); app.use(bodyParser.json()); // to support JSON-encoded bodies app.use( bodyParser.urlencoded({ @@ -96,12 +94,9 @@ app.use( }) ); app.use(cookieParser()); -//app.set('json spaces', 2); io = require("socket.io")({ pingTimeout: 25000 - //path: '/zoff', - //"origins": ("https://zoff.me:443*,https://zoff.me:8080*,zoff.me:8080*,https://remote.zoff.me:443*,https://remote.zoff.me:8080*,https://fb.zoff.me:443*,https://fb.zoff.me:8080*,https://admin.zoff.me:443*,https://admin.zoff.me:8080*, http://localhost:8080*")}); }); var socketIO = require(pathThumbnails + "/handlers/io.js"); @@ -116,12 +111,12 @@ var api = api_file.router; api_file.sIO = app.socketIO; var ico_router = require(pathThumbnails + "/routing/client/icons_routing.js"); -app.get("/robots.txt", function(req, res) { +app.get("/robots.txt", function (req, res) { res.type("text/plain"); res.send("User-agent: *\nAllow: /$\nDisallow: /"); }); -app.use(function(req, res, next) { +app.use(function (req, res, next) { var cookie = req.cookies._uI; var skipElements = [ "/_embed", @@ -145,12 +140,6 @@ app.use(function(req, res, next) { next(); } else { if (cookie === undefined) { - try { - //console.error((new Date), "originalUrl", req.originalUrl); - //console.error((new Date), "couldn't fetch cookie for some reason, maybe no cookie exists?", req.get('origin'), "couldn't fetch cookie for some reason, maybe no cookie exists?"); - } catch (e) { - //console.error((new Date), "couldn't fetch origin"); - } var user_name = Functions.hash_pass( Functions.rndName(uniqid.time(), 15) ); @@ -158,15 +147,12 @@ app.use(function(req, res, next) { maxAge: 365 * 10000 * 3600000, httpOnly: true, secure: secure - //sameSite: true, }); } else { - //process.stderr.write((new Date), "couldn't fetch cookie for some reason, maybe no cookie exists?", req, "couldn't fetch cookie for some reason, maybe no cookie exists?"); res.cookie("_uI", cookie, { maxAge: 365 * 10000 * 3600000, httpOnly: true, secure: secure - //sameSite: true, }); } res.header("Access-Control-Allow-Origin", "*"); @@ -179,7 +165,7 @@ app.use(function(req, res, next) { } }); -app.use("/service-worker.js", function(req, res) { +app.use("/service-worker.js", function (req, res) { res.sendFile(publicPath + "/service-worker.js"); }); @@ -187,21 +173,21 @@ app.use("/", ico_router); app.use("/", api); app.use("/", cors(), router); -app.use("/assets/js", function(req, res, next) { +app.use("/assets/js", function (req, res, next) { res.sendStatus(403); return; }); -app.use("/assets/admin", function(req, res, next) { +app.use("/assets/admin", function (req, res, next) { res.sendStatus(403); return; }); app.use("/assets", express.static(publicPath + "/assets")); -app.use(function(req, res, next) { +app.use(function (req, res, next) { res.status(404); res.redirect("/404"); }); -module.exports = app; +module.exports = app; \ No newline at end of file diff --git a/server/apps/genre_generator.js b/server/apps/genre_generator.js index 292758cd..2b565be9 100644 --- a/server/apps/genre_generator.js +++ b/server/apps/genre_generator.js @@ -1,74 +1,52 @@ -var path = require('path'); -var publicPath = path.join(__dirname, 'public'); -var pathThumbnail = __dirname; +import { + pathThumbnail +} from "../settings/globals"; pathThumbnails = __dirname + "/../"; -var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/; -try { - var keys = require(path.join(__dirname, '../config/api_key.js')); - var key = keys.youtube; - var soundcloudKey = keys.soundcloud; -} catch(e) { - console.log("Error - missing file"); - console.log("Seems you forgot to create the file api_key.js in /server/config/. Have a look at api_key.example.js."); - process.exit(1); -} + var Search = require(pathThumbnail + '/../handlers/search.js'); -var request = require('request'); var db = require(pathThumbnail + '/../handlers/db.js'); -var currentList = 0; var listNames = []; -db.getCollectionNames(function(e, d) { - for(var i = 0; i < d.length; i++) { - if(d[i].indexOf("_") < 0) { - if(d[i].length > 0) { - if(d[i].substring(0, 1) == "." || d[i].substring(d[i].length - 1) == ".") continue; +db.getCollectionNames(function (e, d) { + for (var i = 0; i < d.length; i++) { + if (d[i].indexOf("_") < 0) { + if (d[i].length > 0) { + if (d[i].substring(0, 1) == "." || d[i].substring(d[i].length - 1) == ".") continue; } listNames.push(d[i]); } } console.log("Number of lists is " + listNames.length); - /*for(var i = 0; i < listNames.length; i++) { - getListItems(d[i]); - if(i > 1000) return; - }*/ recursivifyListLooping(listNames, 0); }); -function filterFunction(el) { - return el != null && - el != "" && - el != undefined && - el.trim() != '' -} - function recursivifyListLooping(listNames, i) { - if(i > listNames.length) { + if (i > listNames.length) { console.log("Done"); return; } console.log("List " + i + " of " + listNames.length); - getListItems(listNames, 0, function() { + getListItems(listNames, 0, function () { console.log("done"); }); } function getListItems(arr, i, callback) { console.log("List " + i + " of " + listNames.length + " - " + arr[i]); - if(i >= arr.length) { - if(typeof(callback) == "function") callback(); + if (i >= arr.length) { + if (typeof (callback) == "function") callback(); return; } try { - db.collection(arr[i]).find(function(e, d) { - if(d.length > 0) { - Search.get_genres_list_recursive(d, arr[i], function(){ + db.collection(arr[i]).find(function (e, d) { + if (d.length > 0) { + Search.get_genres_list_recursive(d, arr[i], function () { getListItems(arr, i + 1, callback); }); } else { getListItems(arr, i + 1, callback); } }); - } catch(e) { + } catch (e) { getListItems(arr, i + 1, callback); } -} +} \ No newline at end of file diff --git a/server/config/mongo_config.example.js b/server/config/mongo_config.example.js index 99ffc8d4..63a1b3ce 100644 --- a/server/config/mongo_config.example.js +++ b/server/config/mongo_config.example.js @@ -7,4 +7,4 @@ var mongo_config = { expire: 86400, }; -module.exports = mongo_config; +module.exports = mongo_config; \ No newline at end of file diff --git a/server/handlers/aggregates.js b/server/handlers/aggregates.js index 4be51eab..7b0c4033 100644 --- a/server/handlers/aggregates.js +++ b/server/handlers/aggregates.js @@ -73,7 +73,6 @@ var toShowChannel = { _id: 0, tags: 1, now_playing: 1, - type: 1, source: 1, thumbnail: 1 }; diff --git a/server/handlers/chat.js b/server/handlers/chat.js index df22875a..960925cf 100644 --- a/server/handlers/chat.js +++ b/server/handlers/chat.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var Functions = require(pathThumbnails + "/handlers/functions.js"); var crypto = require("crypto"); var db = require(pathThumbnails + "/handlers/db.js"); diff --git a/server/handlers/db.js b/server/handlers/db.js index 8ba257f3..4c5b945b 100644 --- a/server/handlers/db.js +++ b/server/handlers/db.js @@ -1,17 +1,20 @@ -var path = require("path"); +import { join } from "path"; +import { + mongojs +} from 'mongojs'; + try { - var mongo_config = require(path.join( - path.join(__dirname, "../config/"), + var mongo_config = require( + join(__dirname, "../config/mongo_config.js"), "mongo_config.js" - )); + ); } catch (e) { console.log( "(!) Missing file - /config/mongo_config.js. Have a look at /config/mongo_config.example.js. The server won't run without this existing." ); process.exit(1); } -var mongojs = require("mongojs"); -var db = mongojs("mongodb://" + mongo_config.host + "/" + mongo_config.config); +const db = mongojs("mongodb://" + mongo_config.host + "/" + mongo_config.config); db.collection("chat_logs").createIndex({ createdAt: 1 @@ -20,6 +23,7 @@ db.collection("chat_logs").createIndex({ }, function () {} ); + db.collection("timeout_api").createIndex({ createdAt: 1 }, { @@ -27,6 +31,7 @@ db.collection("timeout_api").createIndex({ }, function () {} ); + db.collection("api_links").createIndex({ createdAt: 1 }, { @@ -34,6 +39,7 @@ db.collection("api_links").createIndex({ }, function () {} ); + db.on("connected", function (err) { console.log("connected"); }); @@ -59,6 +65,7 @@ db.collection("unique_ids").update({ }, function (err, docs) {} ); + db.collection("user_names").remove({ guid: { $exists: true @@ -69,6 +76,7 @@ db.collection("user_names").remove({ }, function (err, docs) {} ); + db.collection("user_names").update({ _id: "all_names" }, { @@ -81,6 +89,7 @@ db.collection("user_names").update({ }, function (err, docs) {} ); + db.collection("connected_users").update({ users: { $exists: true @@ -95,6 +104,7 @@ db.collection("connected_users").update({ }, function (err, docs) {} ); + db.collection("connected_users").update({ _id: "total_users" }, { @@ -107,6 +117,7 @@ db.collection("connected_users").update({ }, function (err, docs) {} ); + db.collection("frontpage_lists").update({ viewers: { $ne: 0 @@ -122,4 +133,4 @@ db.collection("frontpage_lists").update({ function (err, docs) {} ); -module.exports = db; \ No newline at end of file +export default db; \ No newline at end of file diff --git a/server/handlers/frontpage.js b/server/handlers/frontpage.js index c4b98865..e255b502 100644 --- a/server/handlers/frontpage.js +++ b/server/handlers/frontpage.js @@ -1,3 +1,8 @@ +import { + pathThumbnails, + VERSION +} from "../settings/globals"; + var Functions = require(pathThumbnails + "/handlers/functions.js"); var db = require(pathThumbnails + "/handlers/db.js"); diff --git a/server/handlers/functions.js b/server/handlers/functions.js index 4f4e9374..b698598d 100644 --- a/server/handlers/functions.js +++ b/server/handlers/functions.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var path = require("path"); try { var mongo_config = require(path.join( diff --git a/server/handlers/io.js b/server/handlers/io.js index 53bfddf4..06b5ee1f 100644 --- a/server/handlers/io.js +++ b/server/handlers/io.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var cookie = require("cookie"); var Functions = require(pathThumbnails + "/handlers/functions.js"); diff --git a/server/handlers/list.js b/server/handlers/list.js index 902f5a9f..368a70df 100644 --- a/server/handlers/list.js +++ b/server/handlers/list.js @@ -1,3 +1,8 @@ +import { + pathThumbnails, + VERSION +} from "../settings/globals"; + var ColorThief = require("color-thief-jimp"); var Jimp = require("jimp"); var Functions = require(pathThumbnails + "/handlers/functions.js"); @@ -99,9 +104,8 @@ function list(msg, guid, coll, offline, socket) { socket.emit("update_required", result); return; } - coll = msg.channel.toLowerCase(); //.replace(/ /g,''); + coll = msg.channel.toLowerCase(); coll = Functions.removeEmojis(coll).toLowerCase(); - //coll = filter.clean(coll); var pass = msg.pass; db.collection("frontpage_lists").find({ _id: coll @@ -1280,7 +1284,6 @@ function sendColor(coll, socket, url, ajax, res) { } function getNextSong(coll, socket, callback) { - //coll = coll.replace(/ /g,''); db.collection(coll).aggregate( [{ $match: { diff --git a/server/handlers/list_change.js b/server/handlers/list_change.js index 7d0c24d1..4fbcbdf2 100644 --- a/server/handlers/list_change.js +++ b/server/handlers/list_change.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var Functions = require(pathThumbnails + "/handlers/functions.js"); var List = require(pathThumbnails + "/handlers/list.js"); var Frontpage = require(pathThumbnails + "/handlers/frontpage.js"); diff --git a/server/handlers/list_settings.js b/server/handlers/list_settings.js index b9017a17..b58f34a3 100644 --- a/server/handlers/list_settings.js +++ b/server/handlers/list_settings.js @@ -1,3 +1,8 @@ +import { + pathThumbnails +} from "../settings/globals"; + + var Functions = require(pathThumbnails + "/handlers/functions.js"); var crypto = require("crypto"); var projects = require(pathThumbnails + "/handlers/aggregates.js"); diff --git a/server/handlers/search.js b/server/handlers/search.js index d43b6a74..2e7a8760 100644 --- a/server/handlers/search.js +++ b/server/handlers/search.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var path = require("path"); var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/; try { @@ -377,7 +381,6 @@ function get_genres_youtube(ids, channel) { } function get_correct_info(song_generated, channel, broadcast, callback) { - //channel = channel.replace(/ /g,''); request({ type: "GET", url: "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id,topicDetails&key=" + @@ -404,7 +407,6 @@ function get_correct_info(song_generated, channel, broadcast, callback) { .toLowerCase() .split(","); genre = genre.filter(filterFunction); - //console.log(genre + " - ", song_generated.id); if ( title != song_generated.title || duration < parseInt(song_generated.duration) @@ -431,7 +433,6 @@ function get_correct_info(song_generated, channel, broadcast, callback) { function (err, docs) { if (broadcast && docs.nModified == 1) { song_generated.new_id = song_generated.id; - //if(song_generated.type == "video") if (typeof callback == "function") { callback(song_generated, true); } else { @@ -494,7 +495,6 @@ function check_error_video(msg, channel) { return; } if (msg.source == "soundcloud") return; - //channel = channel.replace(/ /g,''); request({ type: "GET", url: "https://www.googleapis.com/youtube/v3/videos?part=id&key=" + @@ -516,7 +516,6 @@ function check_error_video(msg, channel) { } function findSimilar(msg, channel, broadcast, callback) { - //channel = channel.replace(/ /g,''); var yt_url = "https://www.googleapis.com/youtube/v3/search?key=" + key + @@ -626,7 +625,7 @@ function editDistance(s1, s2) { s1 = s1.toLowerCase(); s2 = s2.toLowerCase(); - var costs = new Array(); + var costs = new []; for (var i = 0; i <= s1.length; i++) { var lastValue = i; for (var j = 0; j <= s2.length; j++) { diff --git a/server/handlers/suggestions.js b/server/handlers/suggestions.js index f9a96407..c625790c 100644 --- a/server/handlers/suggestions.js +++ b/server/handlers/suggestions.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var Functions = require(pathThumbnails + "/handlers/functions.js"); var Notifications = require(pathThumbnails + "/handlers/notifications.js"); var crypto = require("crypto"); diff --git a/server/pm2.js b/server/pm2.js deleted file mode 100644 index 7e7e30dd..00000000 --- a/server/pm2.js +++ /dev/null @@ -1,82 +0,0 @@ -var cluster = require("cluster"), - net = require("net"), - path = require("path"), - //publicPath = path.join(__dirname, 'public'), - http = require("http"), - port = 8080, - //farmhash = require('farmhash'), - uniqid = require("uniqid"), - num_processes = require("os").cpus().length; - -publicPath = path.join(__dirname, "public"); -pathThumbnails = __dirname; - -var redis = require("redis"); -var client = redis.createClient({ host: "localhost", port: 6379 }); - -startSingle(true, true); - -function startSingle(clustered, redis_enabled) { - var server; - var client = require("./apps/client.js"); - try { - var cert_config = require(path.join( - path.join(__dirname, "config"), - "cert_config.js" - )); - var fs = require("fs"); - var privateKey = fs.readFileSync(cert_config.privateKey).toString(); - var certificate = fs.readFileSync(cert_config.certificate).toString(); - var ca = fs.readFileSync(cert_config.ca).toString(); - var credentials = { - key: privateKey, - cert: certificate, - ca: ca - }; - var https = require("https"); - server = https.Server(credentials, routingFunction); - } catch (err) { - console.log("Starting without https (probably on localhost)"); - server = http.createServer(routingFunction); - } - - server.listen(port, onListen); - - var socketIO = client.socketIO; - - var redis = require("socket.io-redis"); - try { - socketIO.adapter(redis({ host: "localhost", port: 6379 })); - } catch (e) { - console.log("No redis-server to connect to.."); - } - socketIO.listen(server); -} - -function onListen() { - console.log("Started with pid [" + process.pid + "]"); -} - -function routingFunction(req, res, next) { - var client = require("./apps/client.js"); - var admin = require("./apps/admin.js"); - try { - var url = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"] - : req.headers.host.split(":")[0]; - var subdomain = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"].split(".") - : req.headers.host.split(":")[0].split("."); - - if (subdomain.length > 1 && subdomain[0] == "admin") { - admin(req, res, next); - } else { - client(req, res, next); - } - } catch (e) { - console.log("Bad request for " + req.headers.host + req.url, e); - res.statusCode = 500; - res.write("Bad request"); //write a response to the client - res.end(); //end the response - } -} diff --git a/server/public/assets/js/channel.js b/server/public/assets/js/channel.js index 73d1d327..94f600f5 100644 --- a/server/public/assets/js/channel.js +++ b/server/public/assets/js/channel.js @@ -1,5 +1,9 @@ +import { + VERSION +} from "../../../VERSION"; + var Channel = { - init: function() { + init: function () { if (window.location.hash == "#small" || inIframe()) { small_player = true; document.querySelector("footer").style.display = "none"; @@ -37,7 +41,6 @@ var Channel = { document.querySelector("#hide-playlist").offsetWidth + "px"; } - //Player.soundcloud_player = document.querySelector("#soundcloud_player"); } List.calculate_song_heights(); Admin.logged_in = false; @@ -45,7 +48,6 @@ var Channel = { number_suggested = 0; var no_socket = true; - //chan = Helper.decodeChannelName(Helper.html("#chan")); var _p = window.location.pathname; if (_p.substring(0, 1) == "/") _p = _p.substring(1); if (_p.substring(_p.length - 1) == "/") _p = _p.substring(0, _p.length - 1); @@ -60,7 +62,7 @@ var Channel = { ga("send", "pageview", page); } - window.onpopstate = function(e) { + window.onpopstate = function (e) { Channel.onepage_load(); }; @@ -81,9 +83,8 @@ var Channel = { } if (!client) { - //Helper.tabs('.playlist-tabs'); Helper.tabs(".playlist-tabs-loggedIn", { - onShow: function(e) { + onShow: function (e) { if (this.index == 2) { document.getElementById("text-chat-input").focus(); Chat.channel_received = 0; @@ -103,9 +104,6 @@ var Channel = { .getElementsByClassName("chat-link")[0] .setAttribute("style", "color: white !important;"); blinking = false; - //Helper.css("#chat-container", "display", "block"); - //Helper.css("#wrapper", "display", "none"); - //Helper.css("#suggestions", "display", "none"); document.getElementById("text-chat-input").focus(); Helper.css("#pageButtons", "display", "none"); scrollChat(); @@ -137,23 +135,22 @@ var Channel = { edge: side, closeOnClick: false, draggable: Helper.mobilecheck(), - onOpenStart: function(el) { + onOpenStart: function (el) { Helper.addClass(".hamburger-sidenav", "open"); }, - onCloseStart: function(el) { + onCloseStart: function (el) { Helper.removeClass(".hamburger-sidenav", "open"); } }); M.Collapsible.init( - document.getElementsByClassName("settings-collapsible")[0], - { + document.getElementsByClassName("settings-collapsible")[0], { accordion: true } ); if (!client) { M.Modal.init(document.getElementById("embed"), { - onCloseStart: function() { + onCloseStart: function () { document.querySelector(".embed-preview").innerHTML = ""; } }); @@ -163,12 +160,12 @@ var Channel = { Helper.removeElement(".tabs"); } M.Modal.init(document.getElementById("advanced_filter"), { - onCloseEnd: function() { + onCloseEnd: function () { document.querySelector(".filter-results").innerHTML = ""; document.getElementById("filtersearch_input").value = ""; document.getElementById("filtersearch_input").blur(); }, - onOpenEnd: function() { + onOpenEnd: function () { document.getElementById("filtersearch_input").focus(); } }); @@ -190,7 +187,7 @@ var Channel = { pagination_buttons_html = "
" + document.getElementsByClassName("pagination-results")[0].cloneNode(true) - .innerHTML + + .innerHTML + "
"; empty_results_html = Helper.html("#empty-results-container"); not_import_html = Helper.html(".not-imported-container"); @@ -207,7 +204,7 @@ var Channel = { "" + add, connection_options ); - socket.on("update_required", function(msg) { + socket.on("update_required", function (msg) { if (window.location.hostname == "localhost") { console.error(msg); return; @@ -229,7 +226,7 @@ var Channel = { (document.querySelectorAll("#alreadychannel").length === 0 || !Hostcontroller.old_id || document.getElementById("code-text").innerText.toUpperCase() == - "ABBADUR") + "ABBADUR") ) setup_host_initialization(); setup_suggested_listener(); @@ -278,7 +275,7 @@ var Channel = { .setAttribute( "src", "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + - codeURL + codeURL ); document.getElementById("code-link").setAttribute("href", codeURL); } @@ -300,15 +297,15 @@ var Channel = { .setAttribute( "src", "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + - shareCodeUrl + shareCodeUrl ); Helper.setHtml( "#channel-name-join", "client." + - window.location.hostname + - port + - "/" + - encodeURIComponent(chan.toLowerCase()) + window.location.hostname + + port + + "/" + + encodeURIComponent(chan.toLowerCase()) ); } } else { @@ -380,7 +377,7 @@ var Channel = { } else { Player.loadSoundCloudPlayer(); } - //} + if (Helper.mobilecheck()) { if (!client) { @@ -424,12 +421,11 @@ var Channel = { }); } - addListener("click", ".sp-choose-link", function(e) { + addListener("click", ".sp-choose-link", function (e) { event.preventDefault(); document.getElementsByClassName("sp-choose")[0].click(); }); - //$("#results" ).hover( function() { Helper.removeClass(".result", "hoverResults"); i = 0; }, function(){ }); document.getElementById("search").focus(); Helper.css("#embed-button", "display", "inline-block"); document.getElementById("search").setAttribute("placeholder", "Search..."); @@ -464,9 +460,9 @@ var Channel = { } else if (chromecastReady && !client) { initializeCastApi(); } else if (!client) { - window["__onGCastApiAvailable"] = function(loaded, errorInfo) { + window["__onGCastApiAvailable"] = function (loaded, errorInfo) { if (loaded) { - setTimeout(function() { + setTimeout(function () { chromecastReady = true; initializeCastApi(); }, 1000); @@ -479,13 +475,13 @@ var Channel = { Channel.add_context_menu(); if (!Helper.mobilecheck() && navigator.userAgent.match(/iPad/i) == null) { - setTimeout(function() { + setTimeout(function () { Channel.set_title_width(); }, 100); } }, - set_title_width: function(start) { + set_title_width: function (start) { if (window.innerWidth > 600) { var add_width = document.getElementsByClassName("brand-logo")[0] .offsetWidth; @@ -506,7 +502,7 @@ var Channel = { } }, - spotify_is_authenticated: function(bool) { + spotify_is_authenticated: function (bool) { if (bool) { Helper.log([ "Spotify is authenticated", @@ -524,8 +520,8 @@ var Channel = { } }, - add_context_menu: function() { - addListener("contextmenu", ".vote-container", function(e) { + add_context_menu: function () { + addListener("contextmenu", ".vote-container", function (e) { if (hostMode) { return; } @@ -535,58 +531,58 @@ var Channel = { contextListener(e, that); }); - addListener("contextmenu", ".add-suggested", function(e) { + addListener("contextmenu", ".add-suggested", function (e) { this.preventDefault(); var that = this; contextListener(e, that); }); - addListener("click", ".list-remove", function(e) { + addListener("click", ".list-remove", function (e) { this.preventDefault(); var that = this; contextListener(e, that); }); }, - share_link_modifier: function() { + share_link_modifier: function () { document .getElementById("facebook-code-link") .setAttribute( "href", "https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/" + - chan.toLowerCase() + chan.toLowerCase() ); document .getElementById("facebook-code-link") .setAttribute( "onclick", "window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/" + - chan.toLowerCase() + - "', 'Share Playlist','width=600,height=300'); return false;" + chan.toLowerCase() + + "', 'Share Playlist','width=600,height=300'); return false;" ); document .getElementById("twitter-code-link") .setAttribute( "href", "https://twitter.com/intent/tweet?url=https://zoff.me/" + - chan.toLowerCase() + - "&text=Check%20out%20this%20playlist%20" + - chan.toLowerCase() + - "%20on%20Zoff!&via=zoffmusic" + chan.toLowerCase() + + "&text=Check%20out%20this%20playlist%20" + + chan.toLowerCase() + + "%20on%20Zoff!&via=zoffmusic" ); document .getElementById("twitter-code-link") .setAttribute( "onclick", "window.open('https://twitter.com/intent/tweet?url=https://zoff.me/" + - chan.toLowerCase() + - "/&text=Check%20out%20this%20playlist%20" + - chan.toLowerCase() + - "%20on%20Zoff!&via=zoffmusic','Share Playlist','width=600,height=300'); return false;" + chan.toLowerCase() + + "/&text=Check%20out%20this%20playlist%20" + + chan.toLowerCase() + + "%20on%20Zoff!&via=zoffmusic','Share Playlist','width=600,height=300'); return false;" ); }, - window_width_volume_slider: function() { + window_width_volume_slider: function () { if (window.innerWidth <= 600 && slider_type == "horizontal") { slider_type = "vertical"; Playercontrols.initSlider(); @@ -597,25 +593,25 @@ var Channel = { } }, - listeners: function(on) { - var scrollListener = function(e) { + listeners: function (on) { + var scrollListener = function (e) { if (!programscroll) { userscroll = true; if ( document.getElementById("chatchannel").scrollTop + - document.getElementById("chatchannel").offsetHeight >= + document.getElementById("chatchannel").offsetHeight >= document.getElementById("chatchannel").scrollHeight ) { userscroll = false; } } }; - var scrollAllListener = function(e) { + var scrollAllListener = function (e) { if (!programscroll) { userscroll = true; if ( document.getElementById("chatall").scrollTop + - document.getElementById("chatall").offsetHeight >= + document.getElementById("chatall").offsetHeight >= document.getElementById("chatall").scrollHeight ) { userscroll = false; @@ -641,7 +637,7 @@ var Channel = { } }, - onepage_load: function() { + onepage_load: function () { if (changing_to_frontpage) return; if (user_auth_started) { clearTimeout(durationTimeout); @@ -651,7 +647,6 @@ var Channel = { Helper.tooltip(".castButton", "destroy"); Helper.tooltip("#viewers", "destroy"); Helper.tooltip("#addToOtherList", "destroy"); - //$('.castButton-unactive').tooltip("destroy"); Helper.tooltip("#offline-mode", "destroy"); Helper.tooltip("#admin-lock", "destroy"); } @@ -671,9 +666,8 @@ var Channel = { document.getElementById("chan").innerHTML = Helper.upperFirst(chan); var add = ""; w_p = true; - //if(private_channel) add = Crypt.getCookie("_uI") + "_"; socket.emit("list", { - version: parseInt(_VERSION), + version: VERSION, channel: add + chan.toLowerCase() }); } else if (url_split[3] === "") { @@ -696,7 +690,6 @@ var Channel = { Helper.css("#channel-load", "display", "block"); window.scrollTo(0, 0); - //Player.stopInterval = true; Admin.beginning = true; began = false; durationBegun = false; @@ -734,12 +727,8 @@ var Channel = { } } clearTimeout(tap_target_timeout); - //before_toast(); if (Helper.mobilecheck() || user_auth_avoid || client) { Helper.log(["Removing all listeners"]); - //socket.emit("change_channel"); - //removeAllListeners(); - //socket.removeEventListener(id); socket.emit("left_channel", { channel: channel_before_move }); @@ -750,14 +739,12 @@ var Channel = { socket.removeEventListener("np"); socket.removeEventListener("id"); socket.removeEventListener(id); - //socket.disconnect(); } socket.removeEventListener("chat.all"); socket.removeEventListener("chat"); socket.removeEventListener("conf"); socket.removeEventListener("pw"); socket.removeEventListener("toast"); - //socket.removeEventListener("id"); socket.removeEventListener("channel"); socket.removeEventListener("auth_required"); socket.removeEventListener("auth_accepted"); @@ -767,7 +754,7 @@ var Channel = { Helper.ajax({ url: "/", method: "GET", - success: function(e) { + success: function (e) { if (!client) { document.querySelector("#hide-playlist").remove(); if (hiddenPlaylist) @@ -857,7 +844,6 @@ var Channel = { "afterend", response.querySelectorAll(".section.mega")[0].outerHTML ); - //document.getElementsByTagName("header")[0].insertAdjacentHTML("afterend", response.querySelectorAll(".section.mobile-search")[0].innerHTML); if (Helper.mobilecheck() || user_auth_avoid) { document.getElementsByTagName( "main" @@ -868,7 +854,7 @@ var Channel = { .insertAdjacentHTML( "beforeend", response.querySelectorAll("#main_section_frontpage")[0] - .outerHTML + .outerHTML ); } Helper.removeClass(".page-footer", "padding-bottom-extra"); @@ -915,11 +901,17 @@ function get_history() { if(p == undefined) p = ""; var c = Crypt.crypt_pass(p, true); if(c == undefined) c = "";*/ - socket.emit("get_history", { channel: chan.toLowerCase(), all: false }); - socket.emit("get_history", { channel: chan.toLowerCase(), all: true }); + socket.emit("get_history", { + channel: chan.toLowerCase(), + all: false + }); + socket.emit("get_history", { + channel: chan.toLowerCase(), + all: true + }); } else { - setTimeout(function() { + setTimeout(function () { get_history(); }, 50); } -} +} \ No newline at end of file diff --git a/server/public/assets/js/embed.js b/server/public/assets/js/embed.js index 29a4d3da..e5aa8d15 100755 --- a/server/public/assets/js/embed.js +++ b/server/public/assets/js/embed.js @@ -5,13 +5,6 @@ var song_title = ""; var paused = false; var intelligentList = false; var client = false; -var _VERSION; -try { - _VERSION = localStorage.getItem("VERSION"); - if (_VERSION == null || _VERSION == undefined) throw "Some error"; -} catch (e) { - _VERSION = 6; -} var SC_widget; var scUsingWidget = false; var zoff_api_token = "DwpnKVkaMH2HdcpJT2YPy783SY33byF5/32rbs0+xdU="; @@ -79,10 +72,10 @@ var connection_options = { }; var Crypt = { - crypt_pass: function(pass) { + crypt_pass: function (pass) { return pass; }, - get_background_color: function() { + get_background_color: function () { return "dynamic"; } }; @@ -97,12 +90,16 @@ function receiveMessage(event) { } else if (event.data == "reset") { window.setVolume(100); } else if (event.data == "get_info") { - window.parentWindow.postMessage( - { type: "np", title: song_title }, + window.parentWindow.postMessage({ + type: "np", + title: song_title + }, window.parentOrigin ); - window.parentWindow.postMessage( - { type: "controller", id: Hostcontroller.old_id }, + window.parentWindow.postMessage({ + type: "controller", + id: Hostcontroller.old_id + }, window.parentOrigin ); try { @@ -117,11 +114,11 @@ function receiveMessage(event) { } window.addEventListener("message", receiveMessage, false); -window.addEventListener("DOMContentLoaded", function() {}); +window.addEventListener("DOMContentLoaded", function () {}); var Channel = { - set_title_width: function() {}, - window_width_volume_slider: function() {} + set_title_width: function () {}, + window_width_volume_slider: function () {} }; function getSearch(elem) { @@ -138,7 +135,7 @@ function getSearch(elem) { return result; } -window.addEventListener("load", function() { +window.addEventListener("load", function () { if (autoplay) { Helper.css("#player", "visibility", "hidden"); } @@ -156,8 +153,6 @@ window.addEventListener("load", function() { }); add = "https://zoff.me"; - //if(window.location.hostname == "localhost") add = "localhost"; - //add = "localhost"; socket = io.connect( "" + add, connection_options @@ -167,7 +162,7 @@ window.addEventListener("load", function() { change_offline(true, false); } - socket.on("auth_required", function() { + socket.on("auth_required", function () { M.Modal.getInstance(document.getElementById("locked_channel")).open(); }); @@ -175,9 +170,9 @@ window.addEventListener("load", function() { "https://zoff.me/" + chan.toLowerCase(); document.querySelector(".channel-title").innerText = "/" + chan.toLowerCase(); - socket.on("get_list", function() { + socket.on("get_list", function () { socket_connected = true; - setTimeout(function() { + setTimeout(function () { socket.emit("list", { version: VERSION, channel: chan.toLowerCase(), @@ -186,13 +181,15 @@ window.addEventListener("load", function() { }, 1000); }); - socket.on("self_ping", function() { + socket.on("self_ping", function () { if (chan != undefined && chan.toLowerCase() != "") { - socket.emit("self_ping", { channel: chan.toLowerCase() }); + socket.emit("self_ping", { + channel: chan.toLowerCase() + }); } }); - socket.on("viewers", function(view) { + socket.on("viewers", function (view) { viewers = view; if (song_title !== undefined) Player.getTitle(song_title, viewers); @@ -217,7 +214,6 @@ window.addEventListener("load", function() { .getElementById("playpause") .addEventListener("click", Playercontrols.play_pause); window.setVolume = setVolume; - //Helper.css("#controls", "background-color", color); document.querySelector("body").style.backgroundColor = color; if (embedOptions.hasOwnProperty("control") && embedOptions.control) { @@ -227,14 +223,14 @@ window.addEventListener("load", function() { } }); -window.addEventListener("resize", function() { +window.addEventListener("resize", function () { resizeFunction(); }); function resizePlaylistPlaying() {} function startWaitTimerPlay() { - setTimeout(function() { + setTimeout(function () { if (videoSource == "youtube") { Player.player.playVideo(); } else if (videoSource == "soundcloud") { @@ -256,7 +252,7 @@ function setup_now_playing_listener() { } function setup_list_listener() { - socket.on("channel", function(msg) { + socket.on("channel", function (msg) { Helper.addClass(".site_loader", "hide"); List.channel_function(msg); }); @@ -268,6 +264,7 @@ function setVolume(val) { } function updateChromecastMetadata() {} + function loadChromecastVideo() {} function toast(msg) { @@ -364,7 +361,10 @@ function toast(msg) { break; } before_toast(); - M.toast({ html: msg, displayLength: 4000 }); + M.toast({ + html: msg, + displayLength: 4000 + }); } function emit() { @@ -396,23 +396,23 @@ function change_offline(enabled, already_offline) { } } - var mouseEnter = function(e) { + var mouseEnter = function (e) { Helper.removeClass("#seekToDuration", "hide"); }; - var mouseLeave = function(e) { + var mouseLeave = function (e) { dragging = false; Helper.addClass("#seekToDuration", "hide"); }; - var mouseDown = function(e) { + var mouseDown = function (e) { var acceptable = ["bar", "controls", "duration"]; if (acceptable.indexOf(e.target.id) >= 0) { dragging = true; } }; - var mouseUp = function(e) { + var mouseUp = function (e) { dragging = false; }; if (enabled) { @@ -467,68 +467,61 @@ function change_offline(enabled, already_offline) { } function before_toast() { - /*if($('.toast').length > 0) { - var toastElement = $('.toast').first()[0]; - var toastInstance = toastElement.M_Toast; - toastInstance.remove(); -}*/ M.Toast.dismissAll(); - //Materialize.Toast.removeAll(); } document.addEventListener( "click", - function(e) { + function (e) { handleEvent(e, e.target, false, "click"); }, false ); -addListener("click", ".channel-info-container", function(e) { +addListener("click", ".channel-info-container", function (e) { this.preventDefault(); Player.pauseVideo(); window.open("https://zoff.me/" + chan.toLowerCase() + "/", "_blank"); }); -addListener("click", ".vote-container", function(e) { +addListener("click", ".vote-container", function (e) { var that = e; var id = that.getAttribute("data-video-id"); List.vote(id, "pos"); }); -addListener("click", ".prev_page", function(e) { +addListener("click", ".prev_page", function (e) { event.preventDefault(); List.dynamicContentPage(-1); }); -addListener("click", "#player_overlay", function(event) { +addListener("click", "#player_overlay", function (event) { if (videoSource == "soundcloud") Playercontrols.play_pause(); }); -addListener("click", ".next_page", function(e) { +addListener("click", ".next_page", function (e) { event.preventDefault(); List.dynamicContentPage(1); }); -addListener("click", ".prev", function(event) { +addListener("click", ".prev", function (event) { this.preventDefault(); if (!offline) return; List.skip(false); }); -addListener("click", ".skip", function(event) { +addListener("click", ".skip", function (event) { this.preventDefault(); - //if(!offline) return; List.skip(true); }); -addListener("click", ".last_page", function(e) { +addListener("click", ".last_page", function (e) { event.preventDefault(); List.dynamicContentPage(10); }); -addListener("click", ".first_page", function(e) { +addListener("click", ".first_page", function (e) { event.preventDefault(); List.dynamicContentPage(-10); -}); +}); \ No newline at end of file diff --git a/server/public/assets/js/functions.js b/server/public/assets/js/functions.js index b1b15894..ba1848a4 100644 --- a/server/public/assets/js/functions.js +++ b/server/public/assets/js/functions.js @@ -1,3 +1,7 @@ +import { + VERSION +} from "../../../VERSION"; + function removeAllListeners() { Helper.log(["Removing all listeners"]); socket.removeEventListener("chat.all"); @@ -9,14 +13,12 @@ function removeAllListeners() { socket.removeEventListener("channel"); socket.removeEventListener("np"); socket.removeEventListener("get_list"); - //socket.removeEventListener("self_ping"); socket.removeEventListener("viewers"); socket.removeEventListener("auth_required"); socket.removeEventListener("auth_accepted"); socket.removeEventListener("suggested"); socket.removeEventListener("color"); socket.removeEventListener("chat_history"); - //socket.removeEventListener("name"); socket.removeEventListener(id); } @@ -44,7 +46,7 @@ function filterPlaylistElements(page) { page: page, type: search_type }, - success: function(data) { + success: function (data) { var json = JSON.parse(data); document.querySelector(".filter-results").innerHTML = ""; if (json.results.search_results.length > 0) { @@ -70,7 +72,7 @@ function filterPlaylistElements(page) { "Couldn't find any items with those tags.."; } }, - error: function(e) { + error: function (e) { if (e.status != 429) { toast("Couldn't find any items with those tags..", "red"); @@ -111,11 +113,10 @@ function addFilterButtons(position, json) { } function say_updated() { - setTimeout(function() { + setTimeout(function () { before_toast(); M.toast({ - html: - "The list was updated, want to refresh? yesno", + html: "The list was updated, want to refresh? yesno", displayLength: 10000000 }); }, 500); @@ -150,9 +151,9 @@ function resizeFunction() { if (document.querySelector("#wrapper") == null) return; if (!client && !embed) document.querySelector("#hide-playlist").style.left = - document.querySelector("#video-container").offsetWidth - - document.querySelector("#hide-playlist").offsetWidth + - "px"; + document.querySelector("#video-container").offsetWidth - + document.querySelector("#hide-playlist").offsetWidth + + "px"; if ( ((window.innerWidth > 600 && !embed) || (window.innerWidth > 500 && embed)) && @@ -171,7 +172,7 @@ function resizeFunction() { var scPlaying = false; var ytPlaying = false; if (scUsingWidget) { - Player.soundcloud_player.isPaused(function(paused) { + Player.soundcloud_player.isPaused(function (paused) { try { ytPlaying = Player.player.getPlayerState() == YT.PlayerState.PLAYING || @@ -213,7 +214,7 @@ function resizeFunction() { Helper.computedStyle("header", "height") - 64 - 40) / - 71 + 71 ) + 1; List.element_height = (window.innerHeight - @@ -221,7 +222,7 @@ function resizeFunction() { Helper.computedStyle("header", "height") - 64 - 40) / - temp_fit - + temp_fit - 5; } else { temp_fit = @@ -238,7 +239,7 @@ function resizeFunction() { Helper.computedStyle("header", "height") - 64 - 40) / - 71 + 71 ); List.element_height = (window.innerHeight - @@ -246,17 +247,16 @@ function resizeFunction() { Helper.computedStyle("header", "height") - 64 - 40) / - temp_fit - + temp_fit - 5; } else if (List.element_height < 55.2 && embed) { - //List.can_fit = List.can_fit - 1; temp_fit = Math.round( (window.innerHeight - Helper.computedStyle(".tabs", "height") - Helper.computedStyle("header", "height") - 64 - 40) / - 71 + 71 ); List.element_height = (window.innerHeight - @@ -264,7 +264,7 @@ function resizeFunction() { Helper.computedStyle("header", "height") - 64 - 40) / - temp_fit - + temp_fit - 5; temp_fit = temp_fit - 2; } @@ -295,7 +295,6 @@ function resizeFunction() { } } List.can_fit = temp_fit; - //List.element_height = (Helper.computedStyle("#wrapper", "height") / List.can_fit)-5.3; Helper.css(".list-song", "height", List.element_height + "px"); Channel.set_title_width(); if (!client) { @@ -354,14 +353,19 @@ function getColor(id) { Helper.ajax({ method: "POST", url: "/api/color", - headers: { "Content-Type": "application/json;charset=UTF-8" }, + headers: { + "Content-Type": "application/json;charset=UTF-8" + }, data: JSON.stringify({ id: id }), - success: function(c) { + success: function (c) { c = JSON.parse(c); if (typeof c == "object") { - Player.setBGimage({ color: c, only: true }); + Player.setBGimage({ + color: c, + only: true + }); } } }); @@ -384,14 +388,11 @@ function hide_native(way) { } Helper.toggleClass("#duration", "hide"); Helper.toggleClass("#fullscreen", "hide"); - try { - if (videoSource == "youtube") { - Player.player.stopVideo(); - } else if (videoSource == "soundcloud") { - Player.soundcloud_player.pause(); - } - } catch (e) {} - //clearTimeout(durationTimeout); + if (videoSource == "youtube") { + Player.player.stopVideo(); + } else if (videoSource == "soundcloud") { + Player.soundcloud_player.pause(); + } Player.stopInterval = true; if (Helper.mobilecheck()) { if (document.querySelector("#pause").classList.contains("hide")) { @@ -412,7 +413,7 @@ function hide_native(way) { var thisThumbnail; if (Player.np.thumbnail == undefined) thisThumbnail = - "https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg"; + "https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg"; else thisThumbnail = Player.np.thumbnail; Helper.removeClass("#player_overlay", "hide"); Helper.css("#player_overlay", "display", "block"); @@ -472,7 +473,9 @@ function hide_native(way) { Helper.setHtml("#chromecast_text", ""); Helper.css("#playing_on", "display", "none"); if (!offline) { - socket.emit("pos", { channel: chan.toLowerCase() }); + socket.emit("pos", { + channel: chan.toLowerCase() + }); } else { Player.loadVideoById(video_id); } @@ -521,7 +524,6 @@ function start_auth() { Helper.css("#player_overlay", "display", "block"); M.Modal.getInstance(document.getElementById("user_password")).open(); document.querySelector("#user-pass-input").focus(); - //Crypt.remove_userpass(chan.toLowerCase()); before_toast(); M.toast({ html: "That is not the correct password, try again..", @@ -532,32 +534,30 @@ function start_auth() { function emit_list() { var add = ""; - //if(private_channel) add = Crypt.getCookie("_uI") + "_"; - /*var p = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); - if(p == undefined) p = "";*/ if (socket.id) { socket.emit("list", { - version: parseInt(_VERSION), + version: parseInt(VERSION), channel: add + chan.toLowerCase() }); } else { - setTimeout(function() { + setTimeout(function () { emit_list(); }, 50); } } function get_list_ajax() { - //var c = Crypt.get_userpass(chan.toLowerCase()); Helper.ajax({ type: "POST", data: { userpass: "", token: zoff_api_token }, - headers: { "Content-Type": "application/json;charset=UTF-8" }, + headers: { + "Content-Type": "application/json;charset=UTF-8" + }, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()), - success: function(response) { + success: function (response) { response = JSON.parse(response); if (response.results.length > 0) { if (response.status == 403) { @@ -569,19 +569,17 @@ function get_list_ajax() { List.populate_list(response.results); } }, - error: function(response) { - //response = JSON.parse(response); + error: function (response) { if (response.status == 403) { start_auth(); } else if (response.status == 429) { - setTimeout(function() { + setTimeout(function () { get_list_ajax(); }, xmlhttp.getResponseHeader("Retry-After") * 1000); } else if (response.status == 404) return; if (client) { Helper.removeElement("#channel-load"); } - //List.populate_list(response.responseJSON.results); } }); } @@ -638,14 +636,14 @@ function inIframe() { } function mouseContext(left, top) { - var moveFunction = function(event) { + var moveFunction = function (event) { if ( event.pageX < left - 60 || event.pageX > - left + document.querySelector(".context-menu-root").offsetWidth + 60 || + left + document.querySelector(".context-menu-root").offsetWidth + 60 || event.pageY < top - 60 || event.pageY > - top + document.querySelector(".context-menu-root").offsetHeight + 60 + top + document.querySelector(".context-menu-root").offsetHeight + 60 ) { Helper.addClass(".context-menu-root", "hide"); Helper.addClass("#context-menu-overlay", "hide"); @@ -659,8 +657,6 @@ function mouseContext(left, top) { } function get_np_ajax() { - /*var c = Crypt.get_userpass(chan.toLowerCase()); - if(c == undefined) c = "";*/ Helper.ajax({ type: "POST", data: { @@ -668,19 +664,19 @@ function get_np_ajax() { fetch_song: true, token: zoff_api_token }, - headers: { "Content-Type": "application/json;charset=UTF-8" }, - url: - "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/__np__", - success: function(response) { + headers: { + "Content-Type": "application/json;charset=UTF-8" + }, + url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/__np__", + success: function (response) { response = JSON.parse(response); Player.getTitle(response.results[0].title, 1); }, - error: function(response, xmlhttp) { - //response = JSON.parse(response); + error: function (response, xmlhttp) { if (response.status == 403) { start_auth(); } else if (response.status == 429) { - setTimeout(function() { + setTimeout(function () { get_np_ajax(); }, xmlhttp.getResponseHeader("Retry-After") * 1000); } @@ -689,10 +685,6 @@ function get_np_ajax() { } function del_ajax(id) { - /*var a = Crypt.get_pass(chan.toLowerCase()); - var u = Crypt.get_userpass(chan.toLowerCase()); - if(a == undefined) a = ""; - if(u == undefined) u = "";*/ Helper.ajax({ type: "DELETE", data: { @@ -700,18 +692,19 @@ function del_ajax(id) { userpass: "", token: zoff_api_token }, - headers: { "Content-Type": "application/json;charset=UTF-8" }, + headers: { + "Content-Type": "application/json;charset=UTF-8" + }, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id, - success: function(response) { + success: function (response) { toast("deletesong"); get_list_ajax(); }, - error: function(response, xmlhttp) { - //response = JSON.parse(response); + error: function (response, xmlhttp) { if (response.status == 403) { toast("listhaspass"); } else if (response.status == 429) { - setTimeout(function() { + setTimeout(function () { del_ajax(id); }, xmlhttp.getResponseHeader("Retry-After") * 1000); } @@ -731,10 +724,6 @@ function add_ajax( source, thumbnail ) { - /*var a = Crypt.get_pass(chan.toLowerCase()); - var u = Crypt.get_userpass(chan.toLowerCase()); - if(a == undefined) a = ""; - if(u == undefined) u = "";*/ Helper.ajax({ type: "POST", data: { @@ -748,20 +737,21 @@ function add_ajax( source: source, token: zoff_api_token }, - headers: { "Content-Type": "application/json;charset=UTF-8" }, + headers: { + "Content-Type": "application/json;charset=UTF-8" + }, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id, - success: function(response) { + success: function (response) { toast("addedsong"); get_list_ajax(); }, - error: function(response, xmlhttp) { - //response = JSON.parse(response); + error: function (response, xmlhttp) { if (response.status == 403) { toast("listhaspass"); } else if (response.status == 409) { vote_ajax(id); } else if (response.status == 429) { - setTimeout(function() { + setTimeout(function () { add_ajax(id, title, duration, playlist, num, full_num, start, end); }, xmlhttp.getResponseHeader("Retry-After") * 1000); } @@ -770,10 +760,6 @@ function add_ajax( } function vote_ajax(id) { - /*var a = Crypt.get_pass(chan.toLowerCase()); - var u = Crypt.get_userpass(chan.toLowerCase()); - if(a == undefined) a = ""; - if(u == undefined) u = "";*/ Helper.ajax({ type: "PUT", data: { @@ -781,18 +767,19 @@ function vote_ajax(id) { userpass: "", token: zoff_api_token }, - headers: { "Content-Type": "application/json;charset=UTF-8" }, + headers: { + "Content-Type": "application/json;charset=UTF-8" + }, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id, - success: function(response) { + success: function (response) { toast("voted"); get_list_ajax(); }, - error: function(response, xmlhttp) { - //response = JSON.parse(response); + error: function (response, xmlhttp) { if (response.status == 403) { toast("listhaspass"); } else if (response.status == 429) { - setTimeout(function() { + setTimeout(function () { vote_ajax(id); }, xmlhttp.getResponseHeader("Retry-After") * 1000); } @@ -801,22 +788,21 @@ function vote_ajax(id) { } function setup_auth_listener() { - socket.on("auth_required", function() { + socket.on("auth_required", function () { start_auth(); }); - socket.on("auth_accepted", function(msg) { + socket.on("auth_accepted", function (msg) { if (msg.hasOwnProperty("value") && msg.value) { if (temp_user_pass != "") { userpass = temp_user_pass; - //Crypt.set_userpass(chan.toLowerCase(), userpass); } } }); } function setup_no_connection_listener() { - socket.on("connect_failed", function() { + socket.on("connect_failed", function () { Helper.log(["Connection Failed"]); if (!connect_error) { connect_error = true; @@ -828,7 +814,7 @@ function setup_no_connection_listener() { } }); - socket.on("connect_error", function() { + socket.on("connect_error", function () { Helper.log(["Connection Failed."]); if (!connect_error) { connect_error = true; @@ -871,16 +857,14 @@ function loadChromecastVideo() { seekTo: _seekTo, channel: chan.toLowerCase(), source: videoSource, - thumbnail: - Player.np.thumbnail != undefined - ? Player.np.thumbnail - : "https://img.youtube.com/vi/" + video_id + "/mqdefault.jpg" + thumbnail: Player.np.thumbnail != undefined ? + Player.np.thumbnail : "https://img.youtube.com/vi/" + video_id + "/mqdefault.jpg" }; castSession.loadMedia(request).then( - function() { + function () { console.log("Loaded chromecast-video. Don't look here, look at your TV!"); }, - function(errorCode) { + function (errorCode) { console.log("Error code: " + errorCode); } ); @@ -1027,10 +1011,10 @@ function enable_host_mode(enabled) { .insertAdjacentHTML( "beforeend", "
" + - document - .querySelector("#channel-share-modal") - .querySelector(".modal-content").innerHTML + - "
" + document + .querySelector("#channel-share-modal") + .querySelector(".modal-content").innerHTML + + "" ); document.addEventListener("webkitfullscreenchange", exitHandler, false); document.addEventListener("mozfullscreenchange", exitHandler, false); @@ -1069,19 +1053,16 @@ function enable_host_mode(enabled) { } function get_list_listener() { - socket.on("get_list", function() { + socket.on("get_list", function () { var add = ""; socket_connected = true; - //if(private_channel) add = Crypt.getCookie("_uI") + "_"; - /*var p = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); - if(p == undefined) p = "";*/ socket.emit("list", { offline: offline, - version: parseInt(_VERSION), + version: VERSION, channel: add + chan.toLowerCase() }); }); - socket.on("id_chromecast", function(msg) { + socket.on("id_chromecast", function (msg) { chromecast_specs_sent = true; castSession.sendMessage("urn:x-cast:zoff.me", { type: "mobilespecs", @@ -1094,7 +1075,7 @@ function get_list_listener() { function setup_suggested_listener() { if (client) return; - socket.on("suggested", function(params) { + socket.on("suggested", function (params) { var single = true; if (params.id === undefined) single = false; Suggestions.catchUserSuggests(params, single); @@ -1102,9 +1083,9 @@ function setup_suggested_listener() { } function setup_viewers_listener() { - socket.on("viewers", function(view) { + socket.on("viewers", function (view) { viewers = view; - var outPutWord = "visibility"; //v > 1 ? "viewers" : "viewer"; + var outPutWord = "visibility"; Helper.setHtml("#viewers", outPutWord + " " + view); @@ -1119,7 +1100,7 @@ function setup_admin_listener() { } function setup_chat_listener() { - socket.on("chat_history", function(msg) { + socket.on("chat_history", function (msg) { var data = msg.data; for (var i = 0; i < data.length; i++) { if (msg.all) { @@ -1225,23 +1206,23 @@ function change_offline(enabled, already_offline) { } } - var mouseEnter = function(e) { + var mouseEnter = function (e) { Helper.removeClass("#seekToDuration", "hide"); }; - var mouseLeave = function(e) { + var mouseLeave = function (e) { dragging = false; Helper.addClass("#seekToDuration", "hide"); }; - var mouseDown = function(e) { + var mouseDown = function (e) { var acceptable = ["bar", "controls", "duration"]; if (acceptable.indexOf(e.target.id) >= 0) { dragging = true; } }; - var mouseUp = function(e) { + var mouseUp = function (e) { dragging = false; }; @@ -1348,7 +1329,9 @@ function change_offline(enabled, already_offline) { .removeEventListener("click", seekToClick); Helper.removeElement("#seekToDuration"); socket.on("color", Player.setBGimage); - socket.emit("pos", { channel: chan.toLowerCase() }); + socket.emit("pos", { + channel: chan.toLowerCase() + }); var add = ""; socket.emit("list", { version: parseInt(_VERSION), @@ -1481,7 +1464,7 @@ function resizePlaylistPlaying(playing, resizing) { Helper.computedStyle("header", "height") - 64 - 40) / - 71 + 71 ); List.element_height = (window.innerHeight - @@ -1489,7 +1472,7 @@ function resizePlaylistPlaying(playing, resizing) { Helper.computedStyle("header", "height") - 64 - 40) / - temp_fit - + temp_fit - 5; } @@ -1510,7 +1493,6 @@ function resizePlaylistPlaying(playing, resizing) { ); } } else if (List.can_fit > temp_fit) { - //Helper.css(document.querySelector("#wrapper").children, "display", "none"); Helper.css( document.querySelector("#wrapper").children[List.page + temp_fit], "display", @@ -1676,8 +1658,7 @@ function toast(msg, _class) { if (embed) return; if (Search.submitYouTubeError) { M.toast({ - html: - "Added most of your playlist, but something was wrong. Check the playlist..", + html: "Added most of your playlist, but something was wrong. Check the playlist..", displayLength: 4000, classes: "red lighten connect_error" }); @@ -1714,7 +1695,6 @@ function toast(msg, _class) { "Nope, wrong password!", "Wrong password. The authorities have been notified." ]); - //Crypt.remove_pass(chan.toLowerCase()); Admin.display_logged_out(); Helper.css("#thumbnail_form", "display", "none"); Helper.css("#description_form", "display", "none"); @@ -1804,7 +1784,6 @@ function toast(msg, _class) { "I can't let you do that", "Please log in to do that" ]); - //Crypt.remove_pass(chan.toLowerCase()); Admin.display_logged_out(); Helper.css("#thumbnail_form", "display", "none"); Helper.css("#description_form", "display", "none"); @@ -1851,9 +1830,9 @@ function toast(msg, _class) { if (embed) return; tried_again = false; adminpass = - Crypt.get_pass(chan.toLowerCase()) == undefined - ? Crypt.tmp_pass - : Crypt.get_pass(chan.toLowerCase()); + Crypt.get_pass(chan.toLowerCase()) == undefined ? + Crypt.tmp_pass : + Crypt.get_pass(chan.toLowerCase()); msg = "Correct password. You now have access to the sacred realm of The Admin."; Helper.css("#thumbnail_form", "display", "inline-block"); @@ -1875,7 +1854,11 @@ function toast(msg, _class) { } before_toast(); var classes = _class == undefined ? "" : _class; - M.toast({ html: msg, displayLength: 4000, classes: classes }); + M.toast({ + html: msg, + displayLength: 4000, + classes: classes + }); } function emit() { @@ -1955,23 +1938,14 @@ function searchTimeout(event) { code != 27 ) { clearTimeout(timeout_search); - /*if(search_input.length < 3){ - Helper.css(".results-tabs", "display", "none"); - document.querySelector("#results").innerHTML = ""; - document.querySelector("#results_soundcloud").innerHTML = ""; - Helper.css("") - if(search_input.length == 0) { - document.querySelector("body").setAttribute("style", "overflow-y: auto"); - } -}*/ if (code == 13) { Search.search(search_input); Search.soundcloudSearch(search_input); } else { - timeout_search = setTimeout(function() { + timeout_search = setTimeout(function () { Search.search(search_input); Search.soundcloudSearch(search_input); }, 1000); } } -} +} \ No newline at end of file diff --git a/server/public/assets/js/hostcontroller.js b/server/public/assets/js/hostcontroller.js index b86cd179..0fefb13d 100755 --- a/server/public/assets/js/hostcontroller.js +++ b/server/public/assets/js/hostcontroller.js @@ -1,9 +1,13 @@ +import { + VERSION +} from "../../../VERSION"; + var Hostcontroller = { enabled: true, old_id: null, - host_listener: function(id) { + host_listener: function (id) { if (client) return; Helper.log(["Host-listener triggered", "Host-listener id:" + id]); if (Hostcontroller.old_id === null) Hostcontroller.old_id = id; @@ -16,8 +20,10 @@ var Hostcontroller = { window.location.protocol + "//remote." + window.location.host + "/" + id; if (embed) { if (window.parentWindow && window.parentOrigin) { - window.parentWindow.postMessage( - { type: "controller", id: id }, + window.parentWindow.postMessage({ + type: "controller", + id: id + }, window.parentOrigin ); } @@ -29,7 +35,7 @@ var Hostcontroller = { .setAttribute( "src", "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + - codeURL + codeURL ); document.querySelector("#code-link").setAttribute("href", codeURL); } @@ -39,7 +45,7 @@ var Hostcontroller = { } }, - host_on_action: function(arr) { + host_on_action: function (arr) { if (client) return; if (Hostcontroller.enabled) { if (arr.type == "volume") { @@ -71,20 +77,19 @@ var Hostcontroller = { .setAttribute( "src", "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + - shareCodeUrl + shareCodeUrl ); Helper.setHtml( "#channel-name-join", "client." + - window.location.hostname + - "/" + - encodeURIComponent(chan.toLowerCase()) + window.location.hostname + + "/" + + encodeURIComponent(chan.toLowerCase()) ); w_p = true; var add = ""; - //if(private_channel) add = Crypt.getCookie("_uI") + "_"; socket.emit("list", { - version: parseInt(_VERSION), + version: parseInt(VERSION), channel: add + chan.toLowerCase() }); @@ -103,7 +108,7 @@ var Hostcontroller = { } }, - change_enabled: function(val) { + change_enabled: function (val) { if (client) return; Hostcontroller.enabled = val; try { @@ -111,4 +116,4 @@ var Hostcontroller = { Hostcontroller.enabled; } catch (e) {} } -}; +}; \ No newline at end of file diff --git a/server/public/assets/js/listeners.js b/server/public/assets/js/listeners.js index 3328c3c6..9026a072 100755 --- a/server/public/assets/js/listeners.js +++ b/server/public/assets/js/listeners.js @@ -1,7 +1,11 @@ +import { + VERSION +} from "../../../VERSION"; + var chan = - window.chan === undefined && document.querySelectorAll("#chan").length > 0 - ? document.querySelector("#chan").innerText - : window.chan; + window.chan === undefined && document.querySelectorAll("#chan").length > 0 ? + document.querySelector("#chan").innerText : + window.chan; var w_p = true; var domain = window.location.host.split("."); var client = false; @@ -13,7 +17,7 @@ try { _VERSION = localStorage.getItem("VERSION"); if (_VERSION == null || _VERSION == undefined) throw "Some error"; } catch (e) { - _VERSION = 6; + _VERSION = VERSION; } var SC_widget; var scUsingWidget = false; @@ -37,9 +41,9 @@ var hostMode = false; var soundcloud_loading = false; var buffering = false; var list_html = - document.querySelectorAll("#list-song-html").length > 0 - ? document.querySelector("#list-song-html").innerHTML - : undefined; + document.querySelectorAll("#list-song-html").length > 0 ? + document.querySelector("#list-song-html").innerHTML : + undefined; var unseen = false; var searching = false; var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/; @@ -168,22 +172,18 @@ var fromChannel = false; try { if (navigator.serviceWorker && window.location.host != "zoff.dev") { navigator.serviceWorker - .register("/service-worker.js", { scope: "/" }) - .then(function(registration) { + .register("/service-worker.js", { + scope: "/" + }) + .then(function (registration) { Helper.log(registration); }) - .catch(function(event) { + .catch(function (event) { console.error(event); }); } else { Helper.log("Service Worker is not supported in this browser."); } - /* - navigator.serviceWorker.getRegistration('/').then(function(registration) { - if(registration) { - registration.unregister(); -} -});*/ } catch (event) {} window.zoff = { @@ -192,54 +192,9 @@ window.zoff = { list_last_logs: list_last_logs }; -/*if(!Helper.mobilecheck() && (window.location.host != "localhost" && window.location.host != "client.localhost")) { - window.onerror = function(e, source, lineno, colno, error) { - if(e == "Script error." || e.toString().toLowerCase().indexOf("pagespeed") > -1) return true; - Helper.logs.unshift({log: e.toString().replace(/(\r\n|\n|\r)/gm,""), date: new Date(), lineno: lineno, colno: colno, source:source}); - Helper.logs.unshift({log: chan != "" && chan != undefined ? chan.toLowerCase() : "frontpage", date: new Date()}); - - try { - document.querySelector(".contact-form-content").remove(); - document.querySelector("#submit-contact-form").remove(); - document.querySelector(".contact-modal-header").innerText = "An error occurred"; - document.querySelector(".contact-container-info").remove(); - document.querySelector(".contact-modal-footer").insertAdjacentHTML("beforeend", 'Send'); - document.querySelector("#contact-form").setAttribute("id", "error-report-form"); - document.querySelector("#contact-container").insertAdjacentHTML("afterbegin", '

Do you want to send an error-report?

\ -

\ -
\ - \ -
'); - } catch(e){} - M.Modal.init(document.getElementById("contact")); - M.Modal.getInstance(document.getElementById("contact")).open(); - var cache = []; - Helper.setHtml("#error-report-code", JSON.stringify(Helper.logs, function(key, value) { - if (typeof value === 'object' && value !== null) { - if (cache.indexOf(value) !== -1) { - // Duplicate reference found - try { - // If this value does not reference a parent it can be deduped - return JSON.parse(JSON.stringify(value)); - } catch (error) { - // discard key if value cannot be deduped - return; - } - } - // Store value in our collection - cache.push(value); - } - return value; - }, 4)); - cache = null; - //console.error(e.originalEvent.error); - return true; - }; -}*/ - window.addEventListener( "DOMContentLoaded", - function() { + function () { addDynamicListeners(); if (!_VERSION || parseInt(_VERSION) != VERSION) { try { @@ -251,16 +206,6 @@ window.addEventListener( else if (!fromChannel && window.location.pathname == "/") { Frontpage.init(); } - var okCookie = true; - /*try { - okCookie = localStorage.ok_cookie; - } catch(e) { - okCookie = false; - } - if(!okCookie){ - before_toast(); - //M.toast({html: "This website uses cookies! ok info", displayLength: 10000000}); - }*/ if (window.location.hash == "#cookies") { M.Modal.init(document.getElementById("cookie")); M.Modal.getInstance(document.getElementById("cookie")).open(); @@ -270,8 +215,7 @@ window.addEventListener( document.querySelectorAll( "script[src='https://www.youtube.com/iframe_api']" ).length == 1 - ) { - } else { + ) {} else { tag = document.createElement("script"); tag.src = "https://www.youtube.com/iframe_api"; firstScriptTag = document.getElementsByTagName("script")[0]; @@ -279,19 +223,17 @@ window.addEventListener( } Player.loadSoundCloudPlayer(); Player.loadSoundCloudIframe(); - } else if (window.location.pathname == "/" && client) { - //Player.loadSoundCloudPlayer(); } if (Helper.mobilecheck()) { - socket.on("guid", function(msg) { + socket.on("guid", function (msg) { guid = msg; }); } M.Modal.init(document.getElementById("donate")); - socket.on("connect", function() { + socket.on("connect", function () { if (chromecastAvailable) { socket.emit("get_id"); } @@ -303,14 +245,6 @@ window.addEventListener( channel: chan != undefined ? chan.toLowerCase() : "" }); } - - /*if(chan != undefined && (Crypt.get_pass(chan.toLowerCase()) !== undefined && Crypt.get_pass(chan.toLowerCase()) !== "")){ - emit("password", {password: Crypt.crypt_pass(Crypt.get_pass(chan.toLowerCase())), channel: chan.toLowerCase()}); - }*/ - /*$(".connect_error").fadeOut(function(){ - $(".connect_error").remove(); - M.toast({ html: "Connected!", displayLength: 2000, classes: "green lighten"}); - });*/ var to_remove = document.querySelector(".connect_error"); if (to_remove != null) { var instance = M.Toast.getInstance(to_remove); @@ -321,25 +255,13 @@ window.addEventListener( displayLength: 2000, classes: "green lighten" }); - //before_toast(); } - //Chat.namechange("", true, true); }); - - /*socket.on("name", function(data) { -if(data.type == "name" && data.accepted) { -Crypt.set_name(temp_name, temp_pass); -temp_name = ""; -temp_pass = ""; -} else { -temp_name = ""; -temp_pass = ""; -} -});*/ - - socket.on("self_ping", function() { + socket.on("self_ping", function () { if (chan != undefined && chan.toLowerCase() != "") { - socket.emit("self_ping", { channel: chan.toLowerCase() }); + socket.emit("self_ping", { + channel: chan.toLowerCase() + }); } }); @@ -348,7 +270,7 @@ temp_pass = ""; false ); -initializeCastApi = function() { +initializeCastApi = function () { try { if ( cast == undefined || @@ -367,7 +289,7 @@ initializeCastApi = function() { chromecastReady = true; context.addEventListener( cast.framework.CastContextEventType.SESSION_STATE_CHANGED, - function(event) { + function (event) { Helper.log(["session state", event.sessionState]); switch (event.sessionState) { case cast.framework.SessionState.SESSION_STARTED: @@ -377,12 +299,10 @@ initializeCastApi = function() { chromecastListener ); updateChromecastMetadata(); - //chrome.cast.Image('https://img.youtube.com/vi/'+video_id+'/mqdefault.jpg'); chromecastAvailable = true; paused = false; mobile_beginning = false; - //castSession.sendMessage("urn:x-cast:zoff.me", {type: "loadVideo", start: Player.np.start, end: Player.np.end, videoId: video_id, seekTo: _seekTo, channel: chan.toLowerCase(), source: videoSource, thumbnail: Player.np.thumbnail}) castSession.sendMessage("urn:x-cast:zoff.me", { type: "nextVideo", videoId: full_playlist[0].id, @@ -418,7 +338,6 @@ initializeCastApi = function() { chromecastListener ); updateChromecastMetadata(); - //chrome.cast.Image('https://img.youtube.com/vi/'+video_id+'/mqdefault.jpg'); chromecastAvailable = true; paused = false; mobile_beginning = false; @@ -435,7 +354,6 @@ initializeCastApi = function() { value: chromecastInfoShow }); loadChromecastVideo(); - //castSession.sendMessage("urn:x-cast:zoff.me", {type: "loadVideo", start: Player.np.start, end: Player.np.end, videoId: video_id, seekTo: _seekTo, channel: chan.toLowerCase(), source: videoSource, thumbnail: Player.np.thumbnail}) castSession.sendMessage("urn:x-cast:zoff.me", { type: "nextVideo", videoId: full_playlist[0].id, @@ -459,7 +377,7 @@ initializeCastApi = function() { context.addEventListener( cast.framework.CastContextEventType.CAST_STATE_CHANGED, - function(event) { + function (event) { Helper.log(["cast state", event.castState]); if (event.castState == "NOT_CONNECTED") { Helper.css(".castButton", "display", "block"); @@ -471,20 +389,6 @@ initializeCastApi = function() { } catch (e) { _chSeen = false; } - /*if((!_chSeen || _chSeen != "seen") && !client) { - Helper.css(".castButton", "display", "block"); - showDiscovery = true; - var elem = document.querySelector('.tap-target'); - var instance = M.TapTarget.init(elem); - instance.open(); - tap_target_timeout = setTimeout(function() { - instance.close(); - }, 4000); - try { - localStorage.setItem("_chSeen", "seen"); - } catch(e){} - Helper.removeClass('.castButton', 'castButton-white-active'); - }*/ Helper.removeClass(".castButton", "castButton-white-active"); } else if (event.castState == "NO_DEVICES_AVAILABLE") { cast_ready_connect = false; @@ -501,7 +405,7 @@ initializeCastApi = function() { }; function addDynamicListeners() { - addListener("click", ".preview-embed", function(event) { + addListener("click", ".preview-embed", function (event) { this.preventDefault(); if (document.querySelector(".embed-preview").innerHTML == "") { document.querySelector(".preview-embed").innerText = "Stop"; @@ -522,35 +426,35 @@ function addDynamicListeners() { }); if (Helper.mobilecheck()) { - addListener("click", "#refresh_mobile", function(event) { + addListener("click", "#refresh_mobile", function (event) { this.preventDefault(); clearIntelligentQueue(); before_toast(); }); - addListener("click", "#dont_refresh_list", function(event) { + addListener("click", "#dont_refresh_list", function (event) { this.preventDefault(); before_toast(); }); } - addListener("click", "#player_overlay", function(event) { + addListener("click", "#player_overlay", function (event) { if (chromecastAvailable) { Player.playPauseVideo(); } }); - addListener("click", ".info_change_button", function(event) { + addListener("click", ".info_change_button", function (event) { this.preventDefault(); M.Modal.getInstance(document.querySelector("#channel_info")).open(); }); - addListener("click", "#hide-playlist", function(event) { + addListener("click", "#hide-playlist", function (event) { this.preventDefault(); fullVideo(!hiddenPlaylist); }); - addListener("click", "#bitcoin-address", function(event) { + addListener("click", "#bitcoin-address", function (event) { var copyTextarea = document.querySelector("#bitcoin-address"); copyTextarea.select(); var successful = document.execCommand("copy"); @@ -569,7 +473,7 @@ function addDynamicListeners() { } }); - addListener("click", "#ethereum-address", function(event) { + addListener("click", "#ethereum-address", function (event) { var copyTextarea = document.querySelector("#ethereum-address"); copyTextarea.select(); var successful = document.execCommand("copy"); @@ -591,7 +495,7 @@ function addDynamicListeners() { addListener("click", ".prev-results-button", pagination_results); addListener("click", ".next-results-button", pagination_results); - addListener("click", "#settings", function(event) { + addListener("click", "#settings", function (event) { var sidenavElem = document.getElementsByClassName("sidenav")[0]; if (!M.Sidenav.getInstance(document.querySelector(".sidenav")).isOpen) { M.Sidenav.getInstance(sidenavElem).open(); @@ -600,29 +504,29 @@ function addDynamicListeners() { } }); - addListener("click", ".accept-delete", function(event) { + addListener("click", ".accept-delete", function (event) { this.preventDefault(); - emit("delete_all", { channel: chan.toLowerCase() }); + emit("delete_all", { + channel: chan.toLowerCase() + }); M.Modal.getInstance(document.getElementById("delete_song_alert")).close(); }); - addListener("click", "#chat_submit", function(event) { + addListener("click", "#chat_submit", function (event) { this.preventDefault(); this.stopPropagation(); Chat.chat(document.getElementById("chatForm").input); document.getElementById("chat_submit").focus(); - //return true; - //document.getElementById("chatForm").submit(); }); - addListener("click", "#chat_help", function(event) { + addListener("click", "#chat_help", function (event) { this.preventDefault(), this.stopPropagation(); document.getElementById("text-chat-input").value = "/help"; Chat.chat(document.getElementById("chatForm").input); document.getElementById("chat_submit").focus(); }); - addListener("click", "#offline-mode", function(event) { + addListener("click", "#offline-mode", function (event) { this.preventDefault(); if (!Crypt.get_offline()) { change_offline(true, offline); @@ -631,37 +535,37 @@ function addDynamicListeners() { } }); - addListener("click", ".description_input_send", function(event) { + addListener("click", ".description_input_send", function (event) { this.preventDefault(); sendDescription(); }); - addListener("click", ".rules_input_send", function(event) { + addListener("click", ".rules_input_send", function (event) { this.preventDefault(); sendRules(); }); - addListener("click", ".thumbnail_input_send", function(event) { + addListener("click", ".thumbnail_input_send", function (event) { this.preventDefault(); sendThumbnail(); }); - addListener("submit", "#thumbnail_input_form", function(event) { + addListener("submit", "#thumbnail_input_form", function (event) { this.preventDefault(); sendThumbnail(); }); - addListener("submit", "#description_input_form", function(event) { + addListener("submit", "#description_input_form", function (event) { this.preventDefault(); sendDescription(); }); - addListener("submit", "#rules_input_form", function(event) { + addListener("submit", "#rules_input_form", function (event) { this.preventDefault(); sendRules(); }); - addListener("click", "#playpause-overlay", function() { + addListener("click", "#playpause-overlay", function () { if (document.getElementById("play-overlay").classList.contains("hide")) { Player.pauseVideo(); Helper.toggleClass("#play-overlay", "hide"); @@ -675,7 +579,7 @@ function addDynamicListeners() { } }); - addListener("click", "#cookieok", function(e) { + addListener("click", "#cookieok", function (e) { this.preventDefault(); M.Toast.getInstance(e.parentElement).dismiss(); try { @@ -683,18 +587,18 @@ function addDynamicListeners() { } catch (e) {} }); - addListener("click", "#cookieinfo", function(e) { + addListener("click", "#cookieinfo", function (e) { this.preventDefault(); M.Modal.init(document.getElementById("cookie")); M.Modal.getInstance(document.getElementById("cookie")).open(); }); - addListener("click", ".connect_error", function(event) { + addListener("click", ".connect_error", function (event) { this.preventDefault(); M.Toast.getInstance(this.parentElement).dismiss(); }); - addListener("click", ".extra-button-search", function(e) { + addListener("click", ".extra-button-search", function (e) { this.preventDefault(); document.getElementById("search").value = e.getAttribute("data-text"); document.querySelector(".song-title").click(); @@ -703,7 +607,7 @@ function addDynamicListeners() { document.getElementById("search").focus(); }); - addListener("click", ".extra-button-delete", function(e) { + addListener("click", ".extra-button-delete", function (e) { this.preventDefault(); e.parentElement.remove(); if ( @@ -713,13 +617,13 @@ function addDynamicListeners() { } }); - addListener("click", "#context-menu-overlay", function(event) { + addListener("click", "#context-menu-overlay", function (event) { Helper.addClass(".context-menu-root", "hide"); Helper.addClass("#context-menu-overlay", "hide"); Helper.addClass(".context-menu-root", "data-id", ""); }); - addListener("click", ".copy-context-menu", function(e) { + addListener("click", ".copy-context-menu", function (e) { this.preventDefault(); var that = e; var parent = that.parentElement; @@ -763,7 +667,7 @@ function addDynamicListeners() { .setAttribute("data-id", ""); }); - addListener("click", ".find-context-menu", function(e) { + addListener("click", ".find-context-menu", function (e) { this.preventDefault(); var that = e; if (that.classList.contains("context-menu-disabled")) { @@ -783,7 +687,7 @@ function addDynamicListeners() { .setAttribute("data-id", ""); }); - addListener("click", ".playlist-search-button", function(e) { + addListener("click", ".playlist-search-button", function (e) { this.preventDefault(); Helper.toggleClass("#find_div", "hide"); document.getElementById("find_input").value = ""; @@ -794,23 +698,23 @@ function addDynamicListeners() { find_word = ""; }); - addListener("click", "#open_advanced_filter", function(e) { + addListener("click", "#open_advanced_filter", function (e) { this.preventDefault(); M.Modal.getInstance(document.getElementById("advanced_filter")).open(); ga("send", "event", "button-click", "advanced_filter"); }); - addListener("submit", "#filter-form", function(e) { + addListener("submit", "#filter-form", function (e) { this.preventDefault(); filterPlaylistElements(1); }); - addListener("click", ".submit-filter-search", function(e) { + addListener("click", ".submit-filter-search", function (e) { this.preventDefault(); filterPlaylistElements(1); }); - addListener("click", ".next-filter", function(e) { + addListener("click", ".next-filter", function (e) { this.preventDefault(); var page = e.getAttribute("data-page"); page = parseInt(page); @@ -821,7 +725,7 @@ function addDynamicListeners() { filterPlaylistElements(page); }); - addListener("click", ".prev-filter", function(e) { + addListener("click", ".prev-filter", function (e) { this.preventDefault(); var page = e.getAttribute("data-page"); page = parseInt(page); @@ -832,7 +736,7 @@ function addDynamicListeners() { filterPlaylistElements(page); }); - addListener("click", ".delete-context-menu", function(e) { + addListener("click", ".delete-context-menu", function (e) { var that = e; if (that.classList.contains("context-menu-disabled")) { return; @@ -867,7 +771,7 @@ function addDynamicListeners() { .setAttribute("data-id", ""); }); - addListener("click", "#closePlayer", function(event) { + addListener("click", "#closePlayer", function (event) { this.preventDefault(); socket.emit("change_channel"); try { @@ -896,7 +800,7 @@ function addDynamicListeners() { Helper.removeElement("#main-row"); }); - addListener("change", "#width_embed", function(event) { + addListener("change", "#width_embed", function (event) { var that = this.target; embed_width = that.value; if (previewing) @@ -918,7 +822,7 @@ function addDynamicListeners() { ); }); - addListener("change", "#height_embed", function(event) { + addListener("change", "#height_embed", function (event) { var that = this.target; embed_height = that.value; if (previewing) @@ -940,36 +844,22 @@ function addDynamicListeners() { ); }); - addListener("click", ".prev_page", function(event) { - //addListener("click", ".prev_page", function(event){ + addListener("click", ".prev_page", function (event) { this.preventDefault(); List.dynamicContentPage(-1); }); - addListener("click", ".modal-close", function(event) { + addListener("click", ".modal-close", function (event) { this.preventDefault(); }); - addListener("click", "#player_overlay", function(event) { + addListener("click", "#player_overlay", function (event) { if (videoSource == "soundcloud") { Playercontrols.play_pause(); } }); - /* - addListener("change", ".password_protected", function(event) { - this.preventDefault(); - if(this.checked) { - M.Modal.getInstance(document.getElementById("user_password")).open(); - document.getElementById("user-pass-input").focus(); - } else { - userpass = ""; - Helper.addClass(".change_user_pass", "hide"); - Admin.save(true); - } - });*/ - - addListener("submit", "#user-password-channel-form", function(event) { + addListener("submit", "#user-password-channel-form", function (event) { this.preventDefault(); if (user_auth_started) { temp_user_pass = document.getElementById("user-pass-input").value; @@ -989,18 +879,18 @@ function addDynamicListeners() { } }); - addListener("click", ".change_user_pass_btn", function(event) { + addListener("click", ".change_user_pass_btn", function (event) { this.preventDefault(); user_change_password = true; M.Modal.getInstance(document.getElementById("user_password")).open(); document.getElementById("user-pass-input").focus(); }); - addListener("contextmenu", "#context-menu-overlay", function(event) { + addListener("contextmenu", "#context-menu-overlay", function (event) { this.preventDefault(); }); - addListener("click", ".submit-user-password", function(event) { + addListener("click", ".submit-user-password", function (event) { this.preventDefault(); if (user_auth_started) { temp_user_pass = document.getElementById("user-pass-input").value; @@ -1019,7 +909,7 @@ function addDynamicListeners() { } }); - addListener("click", "#abort-channel-login", function(event) { + addListener("click", "#abort-channel-login", function (event) { this.preventDefault(); if (user_auth_started) { clearTimeout(durationTimeout); @@ -1029,7 +919,6 @@ function addDynamicListeners() { Helper.tooltip(".castButton", "destroy"); Helper.tooltip("#viewers", "destroy"); Helper.tooltip("#addToOtherList", "destroy"); - //$('.castButton-unactive').tooltip("destroy"); Helper.tooltip("#offline-mode", "destroy"); Helper.tooltip("#admin-lock", "destroy"); } @@ -1047,49 +936,49 @@ function addDynamicListeners() { } }); - addListener("click", ".delete-all-songs", function(event) { + addListener("click", ".delete-all-songs", function (event) { this.preventDefault(); M.Modal.getInstance(document.getElementById("delete_song_alert")).open(); }); - addListener("click", ".extra-add-text", function(e) { + addListener("click", ".extra-add-text", function (e) { try { e.select(); } catch (e) {} }); - addListener("click", ".next_page", function(event) { + addListener("click", ".next_page", function (event) { this.preventDefault(); List.dynamicContentPage(1); }); - addListener("click", ".last_page", function(event) { + addListener("click", ".last_page", function (event) { this.preventDefault(); List.dynamicContentPage(10); }); - addListener("click", ".first_page", function(event) { + addListener("click", ".first_page", function (event) { this.preventDefault(); List.dynamicContentPage(-10); }); - addListener("click", ".donate-button", function(event) { + addListener("click", ".donate-button", function (event) { this.preventDefault(); M.Modal.init(document.getElementById("donate")); ga("send", "event", "button-click", "donate"); M.Modal.getInstance(document.getElementById("donate")).open(); }); - addListener("click", "#toast-container", function() { + addListener("click", "#toast-container", function () { before_toast(); }); - addListener("click", "#aprilfools", function() { + addListener("click", "#aprilfools", function () { Helper.css(".mega", "-webkit-transform", "rotate(0deg)"); Helper.css(".mega", "-moz-transform", "rotate(0deg)"); }); - addListener("change", "#view_channels_select", function(event) { + addListener("change", "#view_channels_select", function (event) { var that = this; if (currently_showing_channels != parseInt(that.target.value)) { Frontpage.populate_channels( @@ -1101,7 +990,7 @@ function addDynamicListeners() { currently_showing_channels = parseInt(that.target.value); }); - addListener("input", "#color_embed", function(e) { + addListener("input", "#color_embed", function (e) { var that = e; color = "&color=" + that.value.substring(1); document.getElementById("embed-area").value = embed_code( @@ -1114,17 +1003,17 @@ function addDynamicListeners() { ); }); - addListener("click", ".chan-link", function(e) { + addListener("click", ".chan-link", function (e) { this.preventDefault(); var href; if (window.location.port != "") { href = e.href.replace( window.location.protocol + - "//" + - window.location.hostname + - ":" + - window.location.port + - "/", + "//" + + window.location.hostname + + ":" + + window.location.port + + "/", "" ); } else { @@ -1136,7 +1025,7 @@ function addDynamicListeners() { Frontpage.to_channel(href, false); }); - addListener("click", ".listen-button", function(event) { + addListener("click", ".listen-button", function (event) { if (document.querySelector(".room-namer").value === "") { this.preventDefault(); Frontpage.to_channel( @@ -1147,7 +1036,7 @@ function addDynamicListeners() { } }); - addListener("submit", ".channel-finder", function(event) { + addListener("submit", ".channel-finder", function (event) { this.preventDefault(); Frontpage.to_channel( Helper.encodeChannelName(document.querySelector(".room-namer").value) @@ -1155,7 +1044,7 @@ function addDynamicListeners() { return false; }); - addListener("change", ".backround_switch_class", function() { + addListener("change", ".backround_switch_class", function () { if (document.getElementsByClassName("backround_switch_class")[0].checked) { Crypt.set_background_color("dynamic"); Helper.addClass(".background_color_container", "hide"); @@ -1168,20 +1057,20 @@ function addDynamicListeners() { ga("send", "event", "button-click", "color-change"); }); - addListener("change", "#background_color_choser", function() { + addListener("change", "#background_color_choser", function () { var _color = document.getElementById("background_color_choser").value; if (!document.getElementsByClassName("backround_switch_class")[0].checked) { Crypt.set_background_color(_color); } }); - addListener("change", ".remote_switch_class", function() { + addListener("change", ".remote_switch_class", function () { var enabled = document.getElementsByName("remote_switch")[0].checked; Hostcontroller.change_enabled(enabled); Crypt.set_remote(enabled); }); - addListener("change", ".intelligent_switch_class", function() { + addListener("change", ".intelligent_switch_class", function () { var enabled = document.getElementsByName("intelligent_switch")[0].checked; change_intelligent(enabled); Crypt.set_intelligent_list_enabled(enabled); @@ -1192,7 +1081,7 @@ function addDynamicListeners() { } }); - addListener("change", ".chromecast_info_display_class", function() { + addListener("change", ".chromecast_info_display_class", function () { chromecastInfoShow = document.getElementsByName( "chromecast_info_display" )[0].checked; @@ -1204,17 +1093,17 @@ function addDynamicListeners() { } }); - addListener("change", ".offline_switch_class", function() { + addListener("change", ".offline_switch_class", function () { offline = document.getElementsByName("offline_switch")[0].checked; change_offline(offline, !offline); }); - addListener("change", ".host_switch_class", function() { + addListener("change", ".host_switch_class", function () { var host = document.getElementsByName("host_switch")[0].checked; enable_host_mode(host); }); - addListener("change", ".conf", function(e) { + addListener("change", ".conf", function (e) { this.preventDefault(); if (e.classList.contains("password_protected")) { if (e.checked) { @@ -1230,17 +1119,17 @@ function addDynamicListeners() { } }); - addListener("click", "#clickme", function() { + addListener("click", "#clickme", function () { Player.playVideo(); }); - addListener("click", "#addToOtherList", function(event) { + addListener("click", "#addToOtherList", function (event) { this.preventDefault(); Helper.toggleClass("#addToListInput", "hide"); document.getElementById("other-list-name-add").focus(); }); - addListener("submit", "#addToOtherListForm", function(event) { + addListener("submit", "#addToOtherListForm", function (event) { this.preventDefault(); emit("add", { offsiteAdd: true, @@ -1257,17 +1146,17 @@ function addDynamicListeners() { document.getElementById("other-list-name-add").value = ""; }); - addListener("click", "#listExport", function(event) { + addListener("click", "#listExport", function (event) { this.preventDefault(); if (!youtube_authenticated) { var nonce = Helper.randomString(29); - window.callback = function(data) { + window.callback = function (data) { access_token_data_youtube = data; if (access_token_data_youtube.state == nonce) { youtube_authenticated = true; Helper.removeClass("#playlist_loader_export", "hide"); Helper.addClass(".youtube_export_button", "hide"); - setTimeout(function() { + setTimeout(function () { youtube_authenticated = false; access_token_data_youtube = {}; }, access_token_data_youtube.expires_in * 1000); @@ -1289,10 +1178,12 @@ function addDynamicListeners() { } }); - addListener("click", ".export-soundcloud", function(event) { + addListener("click", ".export-soundcloud", function (event) { this.preventDefault(); window.SC_player = SC_player; - SC_player.connect({ display: "page" }).then(function() { + SC_player.connect({ + display: "page" + }).then(function () { Helper.removeClass("#playlist_loader_export", "hide"); Helper.addClass(".soundcloud-export-button", "hide"); Helper.removeClass(".exported-list-container", "hide"); @@ -1301,15 +1192,15 @@ function addDynamicListeners() { }); }); - addListener("click", ".export-spotify-auth", function(event) { + addListener("click", ".export-spotify-auth", function (event) { this.preventDefault(); var nonce = Helper.randomString(29); - window.callback = function(data) { + window.callback = function (data) { access_token_data = data; if (access_token_data.state == nonce) { spotify_authenticated = true; Channel.spotify_is_authenticated(true); - setTimeout(function() { + setTimeout(function () { spotify_authenticated = false; access_token_data = {}; Channel.spotify_is_authenticated(false); @@ -1330,7 +1221,7 @@ function addDynamicListeners() { ); }); - addListener("submit", "#listImport", function(event) { + addListener("submit", "#listImport", function (event) { this.preventDefault(); var url = document .getElementById("import") @@ -1353,7 +1244,7 @@ function addDynamicListeners() { document.getElementById("import").value = ""; }); - addListener("submit", "#listImportZoff", function(event) { + addListener("submit", "#listImportZoff", function (event) { this.preventDefault(); var new_channel = document.getElementById("import_zoff").value; document.getElementById("import_zoff").value = ""; @@ -1371,20 +1262,20 @@ function addDynamicListeners() { }); }); - addListener("click", ".import-zoff", function(event) { + addListener("click", ".import-zoff", function (event) { this.preventDefault(); Helper.addClass(".import-zoff-container", "hide"); Helper.removeClass(".zoff_add_field", "hide"); }); - addListener("click", ".import-soundcloud", function(event) { + addListener("click", ".import-soundcloud", function (event) { this.preventDefault(); Helper.addClass(".soundcloud-import-button", "hide"); Helper.removeClass(".soundcloud_authenticated", "hide"); document.querySelector("#import_soundcloud").focus(); }); - addListener("submit", "#listImportSoundCloud", function(event) { + addListener("submit", "#listImportSoundCloud", function (event) { this.preventDefault(); Helper.removeClass(".playlist_loader_soundcloud", "hide"); Helper.addClass("#listImportSoundCloud", "hide"); @@ -1394,13 +1285,12 @@ function addDynamicListeners() { headers: { "Content-Type": "application/json" }, - url: - "https://api.soundcloud.com/resolve/?url=" + + url: "https://api.soundcloud.com/resolve/?url=" + document.querySelector("#import_soundcloud").value + "&limit=1&client_id=" + api_key.soundcloud + "&format=json&_status_code_map[200]=200", - success: function(data) { + success: function (data) { try { var jsonData = JSON.parse(data); var tracks = jsonData.tracks; @@ -1430,14 +1320,10 @@ function addDynamicListeners() { continue; } var duration = Math.floor(song.duration / 1000); - //var secs=Search.durationToSeconds(duration); var secs = duration; if (longsongs == undefined) longsongs = true; if ((longsongs != undefined && !longsongs) || secs < 720) { - var id = song.id; - //duration = duration.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"); var thumb = song.artwork_url; - //var thumb = null; if (thumb == null) thumb = song.waveform_url; var songElement = { @@ -1464,7 +1350,7 @@ function addDynamicListeners() { Helper.removeClass("#listImportSoundCloud", "hide"); } }, - error: function(data) { + error: function (data) { Helper.addClass(".playlist_loader_soundcloud", "hide"); Helper.removeClass("#listImportSoundCloud", "hide"); toast( @@ -1474,7 +1360,7 @@ function addDynamicListeners() { }); }); - addListener("submit", "#listImportSpotify", function(event) { + addListener("submit", "#listImportSpotify", function (event) { this.preventDefault(); if ( spotify_authenticated && @@ -1497,10 +1383,10 @@ function addDynamicListeners() { Search.importSpotifyPlaylist( "https://api.spotify.com/v1/users/" + - user + - "/playlists/" + - playlist_id + - "/tracks" + user + + "/playlists/" + + playlist_id + + "/tracks" ); } else { var url = document @@ -1508,8 +1394,6 @@ function addDynamicListeners() { .value.split("https://open.spotify.com/playlist/"); if (url.length == 2) { - /*url = url[1].split("/"); - var user = url[0];*/ var playlist_id = url[1]; playlist_id = playlist_id.replace("?", ""); @@ -1534,7 +1418,7 @@ function addDynamicListeners() { document.getElementById("import_spotify").value = ""; }); - addListener("change", "#autoplay", function(e) { + addListener("change", "#autoplay", function (e) { if (e.checked) embed_autoplay = "&autoplay=true"; else embed_autoplay = "&autoplay=false"; document.getElementById("embed-area").value = embed_code( @@ -1547,7 +1431,7 @@ function addDynamicListeners() { ); }); - addListener("change", "#videoonly", function(e) { + addListener("change", "#videoonly", function (e) { if (e.checked) embed_videoonly = "&videoonly=true"; else embed_videoonly = "&videoonly=false"; if (previewing) @@ -1569,7 +1453,7 @@ function addDynamicListeners() { ); }); - addListener("change", "#localmode", function(e) { + addListener("change", "#localmode", function (e) { if (e.checked) embed_localmode = "&localmode=true"; else embed_localmode = "&localmode=false"; if (previewing) @@ -1591,92 +1475,92 @@ function addDynamicListeners() { ); }); - addListener("click", "#playbutton_remote", function(event) { + addListener("click", "#playbutton_remote", function (event) { this.preventDefault(); Mobile_remote.play_remote(); }); - addListener("click", "#pausebutton_remote", function(event) { + addListener("click", "#pausebutton_remote", function (event) { this.preventDefault(); Mobile_remote.pause_remote(); }); - addListener("click", "#skipbutton_remote", function(event) { + addListener("click", "#skipbutton_remote", function (event) { this.preventDefault(); Mobile_remote.skip_remote(); }); - addListener("click", ".skip_next_client", function(event) { + addListener("click", ".skip_next_client", function (event) { this.preventDefault(); }); - addListener("submit", "#remoteform", function(event) { + addListener("submit", "#remoteform", function (event) { this.preventDefault(); Mobile_remote.get_input(document.getElementById("remote_channel").value); }); - addListener("click", ".chat-tab-li", function() { + addListener("click", ".chat-tab-li", function () { scrollChat(); }); - addListener("click", ".chat-tab", function() { + addListener("click", ".chat-tab", function () { document.getElementById("text-chat-input").focus(); }); - addListener("click", ".prev", function(event) { + addListener("click", ".prev", function (event) { this.preventDefault(); List.skip(false); }); - addListener("click", ".skip", function(event) { + addListener("click", ".skip", function (event) { this.preventDefault(); List.skip(true); }); - addListener("click", "#chan", function(event) { + addListener("click", "#chan", function (event) { this.preventDefault(); List.show(); }); - addListener("submit", "#adminForm", function(event) { + addListener("submit", "#adminForm", function (event) { this.preventDefault(); Admin.pass_save(); }); - addListener("submit", "#strictSkipForm", function(event) { + addListener("submit", "#strictSkipForm", function (event) { this.preventDefault(); Admin.update_strict_skip( document.getElementById("strict-input-number").value ); }); - addListener("click", "#channel-share-modal", function() { + addListener("click", "#channel-share-modal", function () { M.Modal.getInstance(document.getElementById("channel-share-modal")).close(); }); - addListener("click", ".shareface", function(event) { + addListener("click", ".shareface", function (event) { ga("send", "event", "button-click", "share-facebook"); }); - addListener("click", ".android-image-link", function() { + addListener("click", ".android-image-link", function () { ga("send", "event", "button-click", "android-playstore-link"); }); - addListener("click", "#twitter-code-link", function() { + addListener("click", "#twitter-code-link", function () { ga("send", "event", "button-click", "share-twitter"); }); - addListener("click", ".help-button-footer", function() { + addListener("click", ".help-button-footer", function () { this.preventDefault(); M.Modal.init(document.getElementById("help")); ga("send", "event", "button-click", "help-footer"); M.Modal.getInstance(document.getElementById("help")).open(); }); - addListener("click", "#embed-button", function() { + addListener("click", "#embed-button", function () { this.preventDefault(); M.Modal.init(document.getElementById("embed"), { - onCloseStart: function() { + onCloseStart: function () { document.querySelector(".embed-preview").innerHTML = ""; } }); @@ -1691,21 +1575,21 @@ function addDynamicListeners() { M.Modal.getInstance(document.getElementById("embed")).open(); }); - addListener("click", "#contact-button", function() { + addListener("click", "#contact-button", function () { this.preventDefault(); M.Modal.init(document.getElementById("contact")); ga("send", "event", "button-click", "contact-footer"); M.Modal.getInstance(document.getElementById("contact")).open(); }); - addListener("click", ".about-button", function() { + addListener("click", ".about-button", function () { this.preventDefault(); M.Modal.init(document.getElementById("about")); ga("send", "event", "button-click", "contact-footer"); M.Modal.getInstance(document.getElementById("about")).open(); }); - addListener("click", ".playlist-link", function(event) { + addListener("click", ".playlist-link", function (event) { chat_active = false; Helper.css("#chat-container", "display", "none"); Helper.css("#wrapper", "display", "block"); @@ -1713,7 +1597,7 @@ function addDynamicListeners() { Helper.css("#pageButtons", "display", "flex"); }); - addListener("click", ".suggested-link", function(event) { + addListener("click", ".suggested-link", function (event) { chat_active = false; Helper.css("#chat-container", "display", "none"); Helper.css("#wrapper", "display", "none"); @@ -1721,15 +1605,15 @@ function addDynamicListeners() { Helper.css("#pageButtons", "display", "none"); }); - addListener("click", ".import-spotify-auth", function(event) { + addListener("click", ".import-spotify-auth", function (event) { this.preventDefault(); var nonce = Helper.randomString(29); - window.callback = function(data) { + window.callback = function (data) { access_token_data = data; if (access_token_data.state == nonce) { spotify_authenticated = true; Channel.spotify_is_authenticated(true); - setTimeout(function() { + setTimeout(function () { spotify_authenticated = false; access_token_data = {}; Channel.spotify_is_authenticated(false); @@ -1750,45 +1634,44 @@ function addDynamicListeners() { ); }); - addListener("click", ".import-youtube", function(event) { + addListener("click", ".import-youtube", function (event) { this.preventDefault(); Helper.css(".youtube_unclicked", "display", "none"); Helper.css(".youtube_clicked", "display", "block"); }); - addListener("submit", "#chatForm", function(event) { + addListener("submit", "#chatForm", function (event) { this.preventDefault(); this.stopPropagation(); Chat.chat(document.getElementById("chatForm").input); return false; }); - addListener("click", "#shuffle", function(event) { + addListener("click", "#shuffle", function (event) { this.preventDefault(); Admin.shuffle(); }); - addListener("click", "#search-btn", function(event) { + addListener("click", "#search-btn", function (event) { this.preventDefault(); Search.showSearch(); }); - addListener("click", "#song-title", function(event) { + addListener("click", "#song-title", function (event) { this.preventDefault(); Search.showSearch(); }); - addListener("click", "#admin-lock", function(event) { + addListener("click", "#admin-lock", function (event) { this.preventDefault(); Admin.log_out(); }); - addListener("click", "#closeSettings", function(event) { - //this.preventDefault(); + addListener("click", "#closeSettings", function (event) { Admin.hide_settings(); }); - addListener("click", ".result-object", function(e) { + addListener("click", ".result-object", function (e) { var html = this.target; var substr = this.target.outerHTML.substring(0, 4); if ( @@ -1838,8 +1721,7 @@ function addDynamicListeners() { ); } catch (err) { M.toast({ - html: - "Only numbers are accepted as song start and end parameters..", + html: "Only numbers are accepted as song start and end parameters..", displayLength: 3000, classes: "red lighten" }); @@ -1848,7 +1730,7 @@ function addDynamicListeners() { } }); - addListener("click", ".result-get-more-info", function(event) { + addListener("click", ".result-get-more-info", function (event) { this.preventDefault(); var that = this.target; var parent = that.parentElement.parentElement.parentElement.parentElement; @@ -1873,15 +1755,14 @@ function addDynamicListeners() { } }); - addListener("click", "#submit-contact-form", function(event) { + addListener("click", "#submit-contact-form", function (event) { this.preventDefault(); var message = document.getElementById("contact-form-message").value; var from = document.getElementById("contact-form-from").value; Helper.send_mail(from, message); - //document.getElementById("contact-form").submit(); }); - addListener("submit", "#contact-form", function(event) { + addListener("submit", "#contact-form", function (event) { this.preventDefault(); var message = document.getElementById("contact-form-message").value; var from = document.getElementById("contact-form-from").value; @@ -1889,7 +1770,7 @@ function addDynamicListeners() { Helper.send_mail(from, message); }); - addListener("click", ".send-error-modal", function(event) { + addListener("click", ".send-error-modal", function (event) { this.preventDefault(); var captcha_response = grecaptcha.getResponse(); @@ -1905,7 +1786,7 @@ function addDynamicListeners() { "g-recaptcha-response": captcha_response }, url: "/api/mail", - success: function(data) { + success: function (data) { if (data == "success") { Helper.removeElement(".send-error-modal"); Helper.removeElement("#error-report-form"); @@ -1926,12 +1807,10 @@ function addDynamicListeners() { } }); return false; - //document.getElementById("error-report-form").submit(); }); - addListener("submit", "#error-report-form", function(event) { + addListener("submit", "#error-report-form", function (event) { this.preventDefault(); - //event.preventDefault(); var captcha_response = grecaptcha.getResponse(); @@ -1947,7 +1826,7 @@ function addDynamicListeners() { "g-recaptcha-response": captcha_response }, url: "/api/mail", - success: function(data) { + success: function (data) { if (data == "success") { Helper.removeElement(".send-error-modal"); Helper.removeElement("#error-report-form"); @@ -1969,7 +1848,7 @@ function addDynamicListeners() { }); }); - addListener("click", "#add-many", function(e) { + addListener("click", "#add-many", function (e) { this.preventDefault(); this.stopPropagation(); var id = e.getAttribute("data-video-id"); @@ -2027,7 +1906,7 @@ function addDynamicListeners() { } }); - addListener("click", ".vote-container", function(e, target) { + addListener("click", ".vote-container", function (e, target) { if (hostMode) { toast("Can't vote while in host mode!", "red lighten"); document @@ -2039,12 +1918,12 @@ function addDynamicListeners() { List.vote(id, "pos"); }); - addListener("click", ".delete_button", function(e) { + addListener("click", ".delete_button", function (e) { var id = e.getAttribute("data-video-id"); List.vote(id, "del"); }); - addListener("click", ".add-suggested", function(e) { + addListener("click", ".add-suggested", function (e) { var id = e.getAttribute("data-video-id"); var title = e.getAttribute("data-video-title"); var length = e.getAttribute("data-video-length"); @@ -2074,8 +1953,8 @@ function addDynamicListeners() { var to_display = number_suggested > 9 ? "9+" : number_suggested; if ( !document - .querySelector(".suggested-link span.badge.new.white") - .classList.contains("hide") && + .querySelector(".suggested-link span.badge.new.white") + .classList.contains("hide") && to_display == 0 ) { Helper.addClass( @@ -2093,13 +1972,13 @@ function addDynamicListeners() { Helper.removeElement("#suggested-" + id); }); - addListener("click", ".del_suggested", function(e) { + addListener("click", ".del_suggested", function (e) { var id = e.getAttribute("data-video-id"); Helper.removeElement("#suggested-" + id); }); - addListener("click", ".del_user_suggested", function(e) { + addListener("click", ".del_user_suggested", function (e) { var id = e.getAttribute("data-video-id"); Helper.removeElement("#suggested-" + id); @@ -2121,19 +2000,11 @@ function addDynamicListeners() { List.vote(id, "del"); }); - /* - addListener("click", '#toast-container', function(){ - var toastElement = document.querySelector('.toast'); - var toastInstance = M.Toast.getInstance(toastElement); - toastInstance.dismiss(); - }); - */ - - addListener("click", "#embed-area", function(e) { + addListener("click", "#embed-area", function (e) { e.select(); }); - addListener("click", ".brand-logo-navigate", function(event) { + addListener("click", ".brand-logo-navigate", function (event) { this.preventDefault(); if (small_player) { window.open(window.location.origin + window.location.pathname, "_blank"); @@ -2143,17 +2014,17 @@ function addDynamicListeners() { Channel.onepage_load(); }); - addListener("click", "#player_bottom_overlay", function(event) { + addListener("click", "#player_bottom_overlay", function (event) { if (this.target.id == "closePlayer") return; Frontpage.to_channel(this.target.getAttribute("data-channel"), false); }); - addListener("click", ".generate-channel-name", function(event) { + addListener("click", ".generate-channel-name", function (event) { this.preventDefault(); Helper.ajax({ type: "GET", url: "/api/generate_name", - success: function(response) { + success: function (response) { document.getElementsByClassName("room-namer")[0].value = ""; document.getElementsByClassName("room-namer")[0].value = response; } @@ -2162,7 +2033,7 @@ function addDynamicListeners() { ga("send", "event", "button-click", "generate-channel"); }); - addListener("click", "#close_find_form_button", function(event) { + addListener("click", "#close_find_form_button", function (event) { this.preventDefault(); find_start = false; find_started = false; @@ -2175,7 +2046,7 @@ function addDynamicListeners() { find_word = ""; }); - addListener("submit", "#find_form", function(event) { + addListener("submit", "#find_form", function (event) { this.preventDefault(); if (this.target.find_value.value != find_word) { find_word = this.target.find_value.value; @@ -2190,8 +2061,8 @@ function addDynamicListeners() { var obj = full_playlist[i]; if ( obj.title - .toLowerCase() - .indexOf(that.find_value.value.toLowerCase()) >= 0 && + .toLowerCase() + .indexOf(that.find_value.value.toLowerCase()) >= 0 && i != full_playlist.length - 1 ) { found_array.push(i); @@ -2234,7 +2105,7 @@ function addDynamicListeners() { document.addEventListener( "keydown", - function(event) { + function (event) { if (window.location.pathname != "/") { if (event.keyCode == 91 || event.keyCode == 17) { find_start = true; @@ -2258,27 +2129,27 @@ function addDynamicListeners() { } else if ( event.keyCode == 32 && document - .querySelector(".search-container") - .classList.contains("hide") && + .querySelector(".search-container") + .classList.contains("hide") && window.location.pathname != "/" && document.querySelector("#text-chat-input") != - document.activeElement && + document.activeElement && document.querySelector("#password") != document.activeElement && document.querySelector("#other-list-name-add") != - document.activeElement && + document.activeElement && document.querySelector("#user-pass-input") != - document.activeElement && + document.activeElement && document.querySelector("#filtersearch_input") != - document.activeElement && + document.activeElement && document.querySelector("#thumbnail_input") != - document.activeElement && + document.activeElement && document.querySelector("#rules_input") != document.activeElement && document.querySelector("#description_input") != - document.activeElement && + document.activeElement && document.querySelector("#contact-form-from") != - document.activeElement && + document.activeElement && document.querySelector("#contact-form-message") != - document.activeElement && + document.activeElement && document.querySelector("#remote_channel") != document.activeElement && document.querySelector("#import") != document.activeElement && document.querySelector("#find_input") != document.activeElement && @@ -2319,15 +2190,14 @@ function addDynamicListeners() { document.addEventListener( "keyup", - function(event) { + function (event) { _kT += event.keyCode; if (_kWay.substring(0, _kT.length) == _kT) { if (_kWay == _kT && !_kDone) { _kDone = true; document.getElementById("main-container").style.transition = "filter .5s"; - setTimeout(function() { - //document.getElementById("main-container").style.transform = "rotate(180deg)"; + setTimeout(function () { document.getElementById("main-container").style.filter = "invert(100%)"; }, 10); @@ -2344,23 +2214,16 @@ function addDynamicListeners() { } else if (_kWay == _kT && _kDone) { _kDone = false; document.getElementById("main-container").style.filter = "invert(0%)"; - //document.getElementById("main-container").style.transform = "rotate(0deg)"; _kT = ""; } } else { _kT = ""; } if (event.keyCode == 27 && window.location.path != "/") { - //$("#results").html(""); Helper.addClass("#search-wrapper", "hide"); Helper.css(".search_results", "display", "none"); Helper.removeClass(".song-title", "hide"); if (document.querySelector("#search-btn i").innerText == "close") { - /*$("#results").slideUp({ - complete: function() { - $("#results").empty(); - } - });*/ document.querySelector("#results").innerHTML = ""; document.querySelector("#results_soundcloud").innerHTML = ""; document @@ -2383,8 +2246,8 @@ function addDynamicListeners() { if ( document.querySelectorAll(".search-container").length != 0 && !document - .querySelector(".search-container") - .classList.contains("hide") + .querySelector(".search-container") + .classList.contains("hide") ) { Helper.toggleClass("#results", "hide"); } @@ -2394,8 +2257,8 @@ function addDynamicListeners() { document.querySelectorAll("#search").length > 0 && document.querySelector("#search").value == "fireplace" && !document - .querySelector(".search-container") - .classList.contains("hide") && + .querySelector(".search-container") + .classList.contains("hide") && window.location.pathname != "/" ) { clearTimeout(timeout_search); @@ -2429,7 +2292,7 @@ function addDynamicListeners() { document.addEventListener( "click", - function(event) { + function (event) { handleEvent(event, event.target, false, "click"); }, true @@ -2437,7 +2300,7 @@ function addDynamicListeners() { document.addEventListener( "mouseleave", - function(event) { + function (event) { if (event.target.className == "card sticky-action") { var that = event.target; if (that.querySelector(".card-reveal") == null) return; @@ -2445,7 +2308,7 @@ function addDynamicListeners() { .querySelector(".card-reveal") .setAttribute("style", "display: block;transform: translateY(0%);"); clearTimeout(image_timeout); - image_timeout = setTimeout(function() { + image_timeout = setTimeout(function () { that .querySelector(".card-reveal") .setAttribute("style", "display: none;"); @@ -2504,7 +2367,7 @@ function addDynamicListeners() { document.addEventListener( "mouseenter", - function(event) { + function (event) { if (event.target.className == "card sticky-action") { var that = event.target; if (that.querySelector(".card-reveal") == null) return; @@ -2512,7 +2375,7 @@ function addDynamicListeners() { .querySelector(".card-reveal") .setAttribute("style", "display: block;"); clearTimeout(image_timeout); - image_timeout = setTimeout(function() { + image_timeout = setTimeout(function () { that .querySelector(".card-reveal") .setAttribute( @@ -2529,7 +2392,7 @@ function addDynamicListeners() { document.addEventListener( "contextmenu", - function(event) { + function (event) { handleEvent(event, event.target, false, "contextmenu"); }, true @@ -2537,7 +2400,7 @@ function addDynamicListeners() { document.addEventListener( "input", - function(event) { + function (event) { handleEvent(event, event.target, false, "input"); }, true @@ -2545,7 +2408,7 @@ function addDynamicListeners() { document.addEventListener( "change", - function(event) { + function (event) { handleEvent(event, event.target, false, "change"); }, true @@ -2553,20 +2416,20 @@ function addDynamicListeners() { document.addEventListener( "submit", - function(event) { + function (event) { handleEvent(event, event.target, false, "submit"); }, true ); - window.addEventListener("focus", function(event) { + window.addEventListener("focus", function (event) { document .getElementById("favicon") .setAttribute("href", "/assets/images/favicon.png"); unseen = false; }); - window.addEventListener("resize", function() { + window.addEventListener("resize", function () { resizeFunction(); }); -} +} \ No newline at end of file diff --git a/server/routing/admin/api.js b/server/routing/admin/api.js index 5b27ac0c..beac62c4 100644 --- a/server/routing/admin/api.js +++ b/server/routing/admin/api.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var express = require("express"); var router = express.Router(); var path = require("path"); @@ -21,15 +25,17 @@ var ObjectId = mongojs.ObjectId; var sIO = require(path.join(__dirname, "../../apps/client.js")).socketIO; var projects = require(pathThumbnails + "/handlers/aggregates.js"); -router.use(function(req, res, next) { +router.use(function (req, res, next) { next(); // make sure we go to the next routes and don't stop here }); -router.route("/api/lists").get(function(req, res) { +router.route("/api/lists").get(function (req, res) { if (req.isAuthenticated()) { db.collection("frontpage_lists") .find() - .sort({ count: -1 }, function(err, docs) { + .sort({ + count: -1 + }, function (err, docs) { res.json(docs); }); } else { @@ -37,9 +43,9 @@ router.route("/api/lists").get(function(req, res) { } }); -router.route("/api/thumbnails").get(function(req, res) { +router.route("/api/thumbnails").get(function (req, res) { if (req.isAuthenticated()) { - db.collection("suggested_thumbnails").find(function(err, docs) { + db.collection("suggested_thumbnails").find(function (err, docs) { res.json(docs); }); } else { @@ -47,9 +53,9 @@ router.route("/api/thumbnails").get(function(req, res) { } }); -router.route("/api/descriptions").get(function(req, res) { +router.route("/api/descriptions").get(function (req, res) { if (req.isAuthenticated()) { - db.collection("suggested_descriptions").find(function(err, docs) { + db.collection("suggested_descriptions").find(function (err, docs) { res.json(docs); }); } else { @@ -57,9 +63,9 @@ router.route("/api/descriptions").get(function(req, res) { } }); -router.route("/api/rules").get(function(req, res) { +router.route("/api/rules").get(function (req, res) { if (req.isAuthenticated()) { - db.collection("suggested_rules").find(function(err, docs) { + db.collection("suggested_rules").find(function (err, docs) { res.json(docs); }); } else { @@ -67,30 +73,44 @@ router.route("/api/rules").get(function(req, res) { } }); -router.route("/api/approve_thumbnail").post(function(req, res) { +router.route("/api/approve_thumbnail").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("suggested_thumbnails").find({ channel: channel }, function( + db.collection("suggested_thumbnails").find({ + channel: channel + }, function ( err, docs ) { var thumbnail = docs[0].thumbnail; - db.collection("frontpage_lists").update( - { _id: channel }, - { $set: { thumbnail: thumbnail } }, - { upsert: true }, - function(err, docs) { - db.collection(channel + "_settings").update( - { views: { $exists: true } }, - { $set: { thumbnail: thumbnail } }, - { upsert: true }, - function(err, docs) { - db.collection("suggested_thumbnails").remove( - { channel: channel }, - function(err, docs) { + db.collection("frontpage_lists").update({ + _id: channel + }, { + $set: { + thumbnail: thumbnail + } + }, { + upsert: true + }, + function (err, docs) { + db.collection(channel + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + thumbnail: thumbnail + } + }, { + upsert: true + }, + function (err, docs) { + db.collection("suggested_thumbnails").remove({ + channel: channel + }, + function (err, docs) { db.collection(channel + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -99,7 +119,7 @@ router.route("/api/approve_thumbnail").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if ( docs[0].hasOwnProperty("userpass") && @@ -123,10 +143,12 @@ router.route("/api/approve_thumbnail").post(function(req, res) { } }); -router.route("/api/deny_thumbnail").post(function(req, res) { +router.route("/api/deny_thumbnail").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("suggested_thumbnails").remove({ channel: channel }, function( + db.collection("suggested_thumbnails").remove({ + channel: channel + }, function ( err, docs ) { @@ -137,25 +159,34 @@ router.route("/api/deny_thumbnail").post(function(req, res) { } }); -router.route("/api/approve_rules").post(function(req, res) { +router.route("/api/approve_rules").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("suggested_rules").find({ channel: channel }, function( + db.collection("suggested_rules").find({ + channel: channel + }, function ( err, docs ) { var rules = docs[0].rules; - db.collection(channel + "_settings").update( - { views: { $exists: true } }, - { $set: { rules: rules } }, - { upsert: true }, - function(err, docs) { - db.collection("suggested_rules").remove( - { channel: channel }, - function(err, docs) { + db.collection(channel + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + rules: rules + } + }, { + upsert: true + }, + function (err, docs) { + db.collection("suggested_rules").remove({ + channel: channel + }, + function (err, docs) { db.collection(channel + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -164,7 +195,7 @@ router.route("/api/approve_rules").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if ( docs[0].hasOwnProperty("userpass") && @@ -186,10 +217,12 @@ router.route("/api/approve_rules").post(function(req, res) { } }); -router.route("/api/deny_rules").post(function(req, res) { +router.route("/api/deny_rules").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("suggested_rules").remove({ channel: channel }, function( + db.collection("suggested_rules").remove({ + channel: channel + }, function ( err, docs ) { @@ -200,16 +233,21 @@ router.route("/api/deny_rules").post(function(req, res) { } }); -router.route("/api/remove_rules").post(function(req, res) { +router.route("/api/remove_rules").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection(channel + "_settings").update( - { views: { $exists: true } }, - { $set: { rules: "" } }, - function(err, docs) { + db.collection(channel + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + rules: "" + } + }, + function (err, docs) { db.collection(channel + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -218,7 +256,7 @@ router.route("/api/remove_rules").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].hasOwnProperty("userpass") && docs[0].userpass != "") docs[0].userpass = true; @@ -234,29 +272,42 @@ router.route("/api/remove_rules").post(function(req, res) { } }); -router.route("/api/approve_description").post(function(req, res) { +router.route("/api/approve_description").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("suggested_descriptions").find({ channel: channel }, function( + db.collection("suggested_descriptions").find({ + channel: channel + }, function ( err, docs ) { var description = docs[0].description; - db.collection("frontpage_lists").update( - { _id: channel }, - { $set: { description: description } }, - { upsert: true }, - function(err, docs) { - db.collection(channel + "_settings").update( - { views: { $exists: true } }, - { $set: { description: description } }, - function(err, docs) { - db.collection("suggested_descriptions").remove( - { channel: channel }, - function(err, docs) { + db.collection("frontpage_lists").update({ + _id: channel + }, { + $set: { + description: description + } + }, { + upsert: true + }, + function (err, docs) { + db.collection(channel + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + description: description + } + }, + function (err, docs) { + db.collection("suggested_descriptions").remove({ + channel: channel + }, + function (err, docs) { db.collection(channel + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -265,7 +316,7 @@ router.route("/api/approve_description").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if ( docs[0].hasOwnProperty("userpass") && @@ -289,13 +340,14 @@ router.route("/api/approve_description").post(function(req, res) { } }); -router.route("/api/deny_description").post(function(req, res) { +router.route("/api/deny_description").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("suggested_descriptions").remove( - { channel: channel }, + db.collection("suggested_descriptions").remove({ + channel: channel + }, 1, - function(err, docs) { + function (err, docs) { res.send(true); } ); @@ -304,20 +356,29 @@ router.route("/api/deny_description").post(function(req, res) { } }); -router.route("/api/remove_thumbnail").post(function(req, res) { +router.route("/api/remove_thumbnail").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("frontpage_lists").update( - { _id: channel }, - { $set: { thumbnail: "" } }, - function(err, docs) { - db.collection(channel + "_settings").update( - { views: { $exists: true } }, - { $set: { thumbnail: "" } }, - function(err, docs) { + db.collection("frontpage_lists").update({ + _id: channel + }, { + $set: { + thumbnail: "" + } + }, + function (err, docs) { + db.collection(channel + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + thumbnail: "" + } + }, + function (err, docs) { db.collection(channel + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -326,7 +387,7 @@ router.route("/api/remove_thumbnail").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if ( docs[0].hasOwnProperty("userpass") && @@ -347,20 +408,29 @@ router.route("/api/remove_thumbnail").post(function(req, res) { } }); -router.route("/api/remove_description").post(function(req, res) { +router.route("/api/remove_description").post(function (req, res) { if (req.isAuthenticated()) { var channel = req.body.channel; - db.collection("frontpage_lists").update( - { _id: channel }, - { $set: { description: "" } }, - function(err, docs) { - db.collection(channel + "_settings").update( - { views: { $exists: true } }, - { $set: { description: "" } }, - function(err, docs) { + db.collection("frontpage_lists").update({ + _id: channel + }, { + $set: { + description: "" + } + }, + function (err, docs) { + db.collection(channel + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + description: "" + } + }, + function (err, docs) { db.collection(channel + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -369,7 +439,7 @@ router.route("/api/remove_description").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if ( docs[0].hasOwnProperty("userpass") && @@ -390,12 +460,17 @@ router.route("/api/remove_description").post(function(req, res) { } }); -router.route("/api/names").get(function(req, res) { +router.route("/api/names").get(function (req, res) { if (req.isAuthenticated()) { - db.collection("registered_users").find( - { _id: { $exists: true } }, - { _id: 1, icon: 1 }, - function(err, docs) { + db.collection("registered_users").find({ + _id: { + $exists: true + } + }, { + _id: 1, + icon: 1 + }, + function (err, docs) { res.json(docs); } ); @@ -404,14 +479,18 @@ router.route("/api/names").get(function(req, res) { } }); -router.route("/api/names").post(function(req, res) { +router.route("/api/names").post(function (req, res) { if (req.isAuthenticated()) { var icon = req.body.icon; var name = req.body.name; - db.collection("registered_users").update( - { _id: name }, - { $set: { icon: icon } }, - function(err, docs) { + db.collection("registered_users").update({ + _id: name + }, { + $set: { + icon: icon + } + }, + function (err, docs) { if (err) res.send(false); else res.send(true); } @@ -421,10 +500,12 @@ router.route("/api/names").post(function(req, res) { } }); -router.route("/api/names").delete(function(req, res) { +router.route("/api/names").delete(function (req, res) { if (req.isAuthenticated()) { var name = req.body.name; - db.collection("registered_users").remove({ _id: name }, function( + db.collection("registered_users").remove({ + _id: name + }, function ( err, docs ) { @@ -436,17 +517,23 @@ router.route("/api/names").delete(function(req, res) { } }); -router.route("/api/token").get(function(req, res) { +router.route("/api/token").get(function (req, res) { if (req.isAuthenticated()) { - token_db.collection("tokens").find(function(err, docs) { + token_db.collection("tokens").find(function (err, docs) { if (docs.length == 1) { - res.json({ token: docs[0].token }); + res.json({ + token: docs[0].token + }); } else { var id = new Buffer(makeid()).toString("base64"); token_db .collection("tokens") - .insert({ token: id }, function(err, docs) { - res.json({ token: id }); + .insert({ + token: id + }, function (err, docs) { + res.json({ + token: id + }); }); } }); @@ -455,11 +542,15 @@ router.route("/api/token").get(function(req, res) { } }); -router.route("/api/api_token").get(function(req, res) { +router.route("/api/api_token").get(function (req, res) { if (req.isAuthenticated()) { token_db .collection("api_token") - .find({ token: { $exists: true } }, function(err, all) { + .find({ + token: { + $exists: true + } + }, function (err, all) { res.json(all); }); } else { @@ -467,12 +558,14 @@ router.route("/api/api_token").get(function(req, res) { } }); -router.route("/api/api_token").delete(function(req, res) { +router.route("/api/api_token").delete(function (req, res) { if (req.isAuthenticated()) { var id = req.body.id; token_db .collection("api_token") - .remove({ _id: ObjectId(id) }, function(err, success) { + .remove({ + _id: ObjectId(id) + }, function (err, success) { if (err) { res.send("failed"); return; @@ -482,7 +575,7 @@ router.route("/api/api_token").delete(function(req, res) { } }); -router.route("/api/api_token").put(function(req, res) { +router.route("/api/api_token").put(function (req, res) { if (req.isAuthenticated()) { var id = req.body.id; var limit = req.body.limit; @@ -492,7 +585,13 @@ router.route("/api/api_token").put(function(req, res) { } token_db .collection("api_token") - .update({ _id: ObjectId(id) }, { $set: { limit: limit } }, function( + .update({ + _id: ObjectId(id) + }, { + $set: { + limit: limit + } + }, function ( err, success ) { @@ -505,7 +604,7 @@ router.route("/api/api_token").put(function(req, res) { } }); -router.route("/api/api_token").post(function(req, res) { +router.route("/api/api_token").post(function (req, res) { if (req.isAuthenticated()) { var name = req.body.name; var id = crypto @@ -514,9 +613,18 @@ router.route("/api/api_token").post(function(req, res) { .digest("base64"); token_db .collection("api_token") - .insert({ name: name, token: id, usage: 0 }, function(err, docs) { - token_db.collection("api_token").find({ token: id }, function(err, d) { - res.json({ token: id, _id: d[0]._id }); + .insert({ + name: name, + token: id, + usage: 0 + }, function (err, docs) { + token_db.collection("api_token").find({ + token: id + }, function (err, d) { + res.json({ + token: id, + _id: d[0]._id + }); }); }); } else { @@ -524,12 +632,14 @@ router.route("/api/api_token").post(function(req, res) { } }); -router.route("/api/delete").post(function(req, res) { +router.route("/api/delete").post(function (req, res) { if (req.isAuthenticated()) { var list = req.body._id; - db.collection(list).drop(function(err, docs) { - db.collection(list + "_settings").drop(function(err, docs) { - db.collection("frontpage_lists").remove({ _id: list }, function( + db.collection(list).drop(function (err, docs) { + db.collection(list + "_settings").drop(function (err, docs) { + db.collection("frontpage_lists").remove({ + _id: list + }, function ( err, docs ) { @@ -542,13 +652,15 @@ router.route("/api/delete").post(function(req, res) { } }); -router.route("/api/remove_token").get(function(req, res) { +router.route("/api/remove_token").get(function (req, res) { if (req.isAuthenticated()) { - token_db.collection("tokens").find(function(err, docs) { + token_db.collection("tokens").find(function (err, docs) { if (docs.length == 1) { token_db .collection("tokens") - .remove({ token: docs[0].token }, function(err, docs) { + .remove({ + token: docs[0].token + }, function (err, docs) { res.send(true); }); } else { @@ -560,17 +672,25 @@ router.route("/api/remove_token").get(function(req, res) { } }); -router.route("/api/pinned").post(function(req, res) { +router.route("/api/pinned").post(function (req, res) { if (req.isAuthenticated()) { var to_pin = req.body._id; - db.collection("frontpage_lists").update( - { pinned: 1 }, - { $set: { pinned: 0 } }, - function(err, resp) { - db.collection("frontpage_lists").update( - { _id: to_pin }, - { $set: { pinned: 1 } }, - function(err, resp) { + db.collection("frontpage_lists").update({ + pinned: 1 + }, { + $set: { + pinned: 0 + } + }, + function (err, resp) { + db.collection("frontpage_lists").update({ + _id: to_pin + }, { + $set: { + pinned: 1 + } + }, + function (err, resp) { res.send(true); } ); @@ -581,13 +701,19 @@ router.route("/api/pinned").post(function(req, res) { } }); -router.route("/api/admin").post(function(req, res) { +router.route("/api/admin").post(function (req, res) { if (req.isAuthenticated()) { var to_remove = req.body._id; - db.collection(to_remove + "_settings").update( - { views: { $exists: true } }, - { $set: { adminpass: "" } }, - function(err, docs) { + db.collection(to_remove + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + adminpass: "" + } + }, + function (err, docs) { res.send(true); } ); @@ -596,13 +722,19 @@ router.route("/api/admin").post(function(req, res) { } }); -router.route("/api/userpass").post(function(req, res) { +router.route("/api/userpass").post(function (req, res) { if (req.isAuthenticated()) { var to_remove = req.body._id; - db.collection(to_remove + "_settings").update( - { views: { $exists: true } }, - { $set: { userpass: "" } }, - function(err, docs) { + db.collection(to_remove + "_settings").update({ + views: { + $exists: true + } + }, { + $set: { + userpass: "" + } + }, + function (err, docs) { res.send(true); } ); @@ -622,4 +754,4 @@ function makeid() { return text; } -module.exports = router; +module.exports = router; \ No newline at end of file diff --git a/server/routing/client/api.js b/server/routing/client/api.js index 1dae9851..709fcdea 100644 --- a/server/routing/client/api.js +++ b/server/routing/client/api.js @@ -1,10 +1,12 @@ +import { + pathThumbnails +} from "../settings/globals"; + var express = require("express"); var router = express.Router(); var path = require("path"); var mongojs = require("mongojs"); -var ObjectId = mongojs.ObjectId; var token_db = mongojs("tokens"); -var cookieParser = require("cookie-parser"); var db = require(pathThumbnails + "/handlers/db.js"); var allowed_key; @@ -23,7 +25,9 @@ var Frontpage = require(pathThumbnails + "/handlers/frontpage.js"); var Search = require(pathThumbnails + "/handlers/search.js"); var uniqid = require("uniqid"); var Filter = require("bad-words"); -var filter = new Filter({ placeHolder: "x" }); +var filter = new Filter({ + placeHolder: "x" +}); var paginate = require("mongojs-paginate"); var _exports = { @@ -73,15 +77,13 @@ var error = { }, wrong_token: { status: 400, - error: - "You're using a faulty token. Try getting a new token, or send the request without the token.", + error: "You're using a faulty token. Try getting a new token, or send the request without the token.", success: false, results: [] }, tooMany: { status: 429, - error: - "You're doing too many requests, check header-field Retry-After for the wait-time left.", + error: "You're doing too many requests, check header-field Retry-After for the wait-time left.", success: false, results: [] }, @@ -111,31 +113,34 @@ var error = { } }; -router.use(function(req, res, next) { +router.use(function (req, res, next) { next(); // make sure we go to the next routes and don't stop here }); -router.route("/api/help").get(function(req, res) { +router.route("/api/help").get(function (req, res) { res.redirect("https://github.com/zoff-music/zoff/blob/master/server/REST.md"); return; }); -router.route("/api/frontpages").get(function(req, res) { +router.route("/api/frontpages").get(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( req.get("User-Agent") + ip + req.headers["accept-language"] ); - checkTimeout(guid, res, false, "GET", function() { - Frontpage.get_frontpage_lists(function(err, docs) { - //db.collection("frontpage_lists").find({frontpage: true, count: {$gt: 0}}, function(err, docs) { - db.collection("connected_users").find({ _id: "total_users" }, function( + checkTimeout(guid, res, false, "GET", function () { + Frontpage.get_frontpage_lists(function (err, docs) { + db.collection("connected_users").find({ + _id: "total_users" + }, function ( err, tot ) { @@ -151,13 +156,15 @@ router.route("/api/frontpages").get(function(req, res) { }); }); -router.route("/api/frontpages").post(function(req, res) { +router.route("/api/frontpages").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( req.get("User-Agent") + ip + req.headers["accept-language"] @@ -175,7 +182,9 @@ router.route("/api/frontpages").post(function(req, res) { token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -191,13 +200,13 @@ router.route("/api/frontpages").post(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "POST", function() { - Frontpage.get_frontpage_lists(function(err, docs) { - //db.collection("frontpage_lists").find({frontpage: true, count: {$gt: 0}}, function(err, docs) { - db.collection("connected_users").find( - { _id: "total_users" }, - function(err, tot) { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "POST", function () { + Frontpage.get_frontpage_lists(function (err, docs) { + db.collection("connected_users").find({ + _id: "total_users" + }, + function (err, tot) { var to_return = error.no_error; to_return.results = { channels: docs, @@ -213,17 +222,19 @@ router.route("/api/frontpages").post(function(req, res) { }); }); -router.route("/api/generate_name").get(function(req, res) { +router.route("/api/generate_name").get(function (req, res) { Functions.generate_channel_name(res); }); -router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { +router.route("/api/list/:channel_name/:video_id").delete(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); if ( !req.body.hasOwnProperty("adminpass") || !req.body.hasOwnProperty("userpass") || @@ -233,15 +244,13 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { var result = { adminpass: { expected: "string", - got: req.body.hasOwnProperty("adminpass") - ? typeof req.body.adminpass - : undefined + got: req.body.hasOwnProperty("adminpass") ? + typeof req.body.adminpass : undefined }, userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -259,21 +268,21 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { req.get("User-Agent") + ip + req.headers["accept-language"] ); var adminpass = - req.body.adminpass == "" - ? "" - : Functions.hash_pass( - crypto - .createHash("sha256") - .update(req.body.adminpass, "utf8") - .digest("hex") - ); + req.body.adminpass == "" ? + "" : + Functions.hash_pass( + crypto + .createHash("sha256") + .update(req.body.adminpass, "utf8") + .digest("hex") + ); req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); var userpass = req.body.userpass; var channel_name = cleanChannelName(req.params.channel_name); var video_id = req.params.video_id; @@ -284,15 +293,13 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { var result = { adminpass: { expected: "string", - got: req.body.hasOwnProperty("adminpass") - ? typeof req.body.adminpass - : undefined + got: req.body.hasOwnProperty("adminpass") ? + typeof req.body.adminpass : undefined }, userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -303,7 +310,7 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.adminpass == "") { adminpass = Functions.hash_pass(_a); } @@ -312,7 +319,9 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -328,13 +337,11 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "DELETE", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "DELETE", function () { if (token != "" && !authorized) { - //updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { res.status(400).send(error.wrong_token); return; - //}); } else { validateLogin( adminpass, @@ -342,14 +349,16 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { channel_name, "delete", res, - function(exists) { + function (exists) { if (!exists) { res.status(404).send(error.not_found.list); return; } - db.collection(channel_name).find( - { id: video_id, now_playing: false }, - function(err, docs) { + db.collection(channel_name).find({ + id: video_id, + now_playing: false + }, + function (err, docs) { if (docs.length == 0) { res.status(404).send(error.not_found.local); return; @@ -359,9 +368,10 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { if (docs[0].type == "suggested") { dont_increment = true; } - db.collection(channel_name).remove( - { id: video_id }, - function(err, docs) { + db.collection(channel_name).remove({ + id: video_id + }, + function (err, docs) { if (authorized) { incrementToken(token); } @@ -370,25 +380,29 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { value: video_id }); if (!dont_increment) { - db.collection("frontpage_lists").update( - { _id: channel_name, count: { $gt: 0 } }, - { - $inc: { count: -1 }, - $set: { accessed: Functions.get_time() } + db.collection("frontpage_lists").update({ + _id: channel_name, + count: { + $gt: 0 + } + }, { + $inc: { + count: -1 + }, + $set: { + accessed: Functions.get_time() + } + }, { + upsert: true }, - { upsert: true }, - function(err, docs) { - //updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { + function (err, docs) { res.status(200).send(error.no_error); return; - //}); } ); } else { - //updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { res.status(200).send(error.no_error); return; - //}); } } ); @@ -404,13 +418,15 @@ router.route("/api/list/:channel_name/:video_id").delete(function(req, res) { }); }); -router.route("/api/skip/:channel_name").post(function(req, res) { +router.route("/api/skip/:channel_name").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var api_key = req.body.api_key; var guid = req.body.chat_name; @@ -418,11 +434,13 @@ router.route("/api/skip/:channel_name").post(function(req, res) { var userpass = ""; if (req.body.userpass && req.body.userpass != "") userpass = crypto - .createHash("sha256") - .update(Functions.decrypt_string(req.body.userpass)) - .digest("base64"); + .createHash("sha256") + .update(Functions.decrypt_string(req.body.userpass)) + .digest("base64"); if (allowed_key.indexOf(api_key) > -1 || allowed_key.indexOf("***") > -1) { - db.collection(channel_name + "_settings").find({ id: "config" }, function( + db.collection(channel_name + "_settings").find({ + id: "config" + }, function ( err, settings ) { @@ -448,8 +466,10 @@ router.route("/api/skip/:channel_name").post(function(req, res) { false, true, undefined, - function() { - db.collection(channel_name).find({ now_playing: true }, function( + function () { + db.collection(channel_name).find({ + now_playing: true + }, function ( err, np ) { @@ -462,7 +482,7 @@ router.route("/api/skip/:channel_name").post(function(req, res) { false, np[0].id, [settings], - function() { + function () { res.status(200).send(error.no_error); return; } @@ -475,21 +495,28 @@ router.route("/api/skip/:channel_name").post(function(req, res) { }); }, "", - function() { + function () { res.status(429).send(error.tooMany); return; } ); } else if (!Functions.contains(settings.skips, guid)) { - db.collection(channel_name + "_settings").update( - { id: "config" }, - { $push: { skips: guid } }, - function(err, d) { + db.collection(channel_name + "_settings").update({ + id: "config" + }, { + $push: { + skips: guid + } + }, + function (err, d) { var to_skip = settings.strictSkipNumber - settings.skips.length - 1; _exports.sIO .to(channel_name) - .emit("chat", { from: guid, msg: " voted to skip via API." }); + .emit("chat", { + from: guid, + msg: " voted to skip via API." + }); // VOTED TO SKIP var to_send = error.more_skip_needed; to_send.results = [to_skip]; @@ -517,13 +544,15 @@ router.route("/api/skip/:channel_name").post(function(req, res) { } }); -router.route("/api/conf/:channel_name").put(function(req, res) { +router.route("/api/conf/:channel_name").put(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); try { if ( @@ -551,21 +580,21 @@ router.route("/api/conf/:channel_name").put(function(req, res) { req.get("User-Agent") + ip + req.headers["accept-language"] ); var adminpass = - req.body.adminpass == "" - ? "" - : Functions.hash_pass( - crypto - .createHash("sha256") - .update(req.body.adminpass, "utf8") - .digest("hex") - ); + req.body.adminpass == "" ? + "" : + Functions.hash_pass( + crypto + .createHash("sha256") + .update(req.body.adminpass, "utf8") + .digest("hex") + ); req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); var userpass = req.body.userpass; var voting = req.body.vote; var addsongs = req.body.addsongs; @@ -596,15 +625,13 @@ router.route("/api/conf/:channel_name").put(function(req, res) { var result = { adminpass: { expected: "string", - got: req.body.hasOwnProperty("adminpass") - ? typeof req.body.adminpass - : undefined + got: req.body.hasOwnProperty("adminpass") ? + typeof req.body.adminpass : undefined }, userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined }, vote: { expected: "boolean", @@ -612,21 +639,18 @@ router.route("/api/conf/:channel_name").put(function(req, res) { }, addsongs: { expected: "boolean", - got: req.body.hasOwnProperty("addsongs") - ? typeof req.body.addsongs - : undefined + got: req.body.hasOwnProperty("addsongs") ? + typeof req.body.addsongs : undefined }, longsongs: { expected: "boolean", - got: req.body.hasOwnProperty("longsongs") - ? typeof req.body.longsongs - : undefined + got: req.body.hasOwnProperty("longsongs") ? + typeof req.body.longsongs : undefined }, frontpage: { expected: "boolean", - got: req.body.hasOwnProperty("frontpage") - ? typeof req.body.frontpage - : undefined + got: req.body.hasOwnProperty("frontpage") ? + typeof req.body.frontpage : undefined }, skip: { expected: "boolean", @@ -634,15 +658,13 @@ router.route("/api/conf/:channel_name").put(function(req, res) { }, shuffle: { expected: "boolean", - got: req.body.hasOwnProperty("shuffle") - ? typeof req.body.shuffle - : undefined + got: req.body.hasOwnProperty("shuffle") ? + typeof req.body.shuffle : undefined }, userpass_changed: { expected: "boolean", - got: req.body.hasOwnProperty("userpass_changed") - ? typeof req.body.userpass_changed - : undefined + got: req.body.hasOwnProperty("userpass_changed") ? + typeof req.body.userpass_changed : undefined } }; var to_send = error.formatting; @@ -651,7 +673,7 @@ router.route("/api/conf/:channel_name").put(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.adminpass == "") { adminpass = Functions.hash_pass(_a); } @@ -660,7 +682,9 @@ router.route("/api/conf/:channel_name").put(function(req, res) { } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -676,13 +700,11 @@ router.route("/api/conf/:channel_name").put(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "CONFIG", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "CONFIG", function () { if (token != "" && !authorized) { - //updateTimeout(guid, res, authorized, "CONFIG", function(err, docs) { res.status(400).send(error.wrong_token); return; - //}); } else { validateLogin( adminpass, @@ -690,7 +712,7 @@ router.route("/api/conf/:channel_name").put(function(req, res) { channel_name, "config", res, - function(exists, conf) { + function (exists, conf) { if (!exists && conf.length == 0) { res.status(404).send(error.not_found.list); return; @@ -723,37 +745,38 @@ router.route("/api/conf/:channel_name").put(function(req, res) { } else if (frontpage) { obj["userpass"] = ""; } - db.collection(channel_name + "_settings").update( - { views: { $exists: true } }, - { + db.collection(channel_name + "_settings").update({ + views: { + $exists: true + } + }, { $set: obj }, - function(err, docs) { + function (err, docs) { if (obj.adminpass !== "") obj.adminpass = true; if (obj.hasOwnProperty("userpass") && obj.userpass != "") obj.userpass = true; else obj.userpass = false; io.to(channel_name).emit("conf", [obj]); - db.collection("frontpage_lists").update( - { _id: channel_name }, - { + db.collection("frontpage_lists").update({ + _id: channel_name + }, { $set: { frontpage: frontpage, accessed: Functions.get_time() } + }, { + upsert: true }, - { upsert: true }, - function(err, docs) { + function (err, docs) { if (authorized) { incrementToken(token); } - //updateTimeout(guid, res, authorized, "CONFIG", function(err, docs) { var to_return = error.no_error; to_return.results = [obj]; res.status(200).send(to_return); return; - //}); } ); } @@ -767,13 +790,15 @@ router.route("/api/conf/:channel_name").put(function(req, res) { }); }); -router.route("/api/list/:channel_name/:video_id").put(function(req, res) { +router.route("/api/list/:channel_name/:video_id").put(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); try { if ( !req.body.hasOwnProperty("adminpass") || @@ -792,21 +817,21 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { req.get("User-Agent") + ip + req.headers["accept-language"] ); var adminpass = - req.body.adminpass == "" - ? "" - : Functions.hash_pass( - crypto - .createHash("sha256") - .update(req.body.adminpass, "utf8") - .digest("hex") - ); + req.body.adminpass == "" ? + "" : + Functions.hash_pass( + crypto + .createHash("sha256") + .update(req.body.adminpass, "utf8") + .digest("hex") + ); req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); var userpass = req.body.userpass; var channel_name = cleanChannelName(req.params.channel_name); var video_id = req.params.video_id; @@ -817,15 +842,13 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { var result = { adminpass: { expected: "string", - got: req.body.hasOwnProperty("adminpass") - ? typeof req.body.adminpass - : undefined + got: req.body.hasOwnProperty("adminpass") ? + typeof req.body.adminpass : undefined }, userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -834,7 +857,7 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.adminpass == "") { adminpass = Functions.hash_pass(_a); } @@ -843,7 +866,9 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -859,13 +884,11 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "PUT", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "PUT", function () { if (token != "" && !authorized) { - //updateTimeout(guid, res, authorized, "PUT", function(err, docs) { res.status(400).send(error.wrong_token); return; - //}); } else { validateLogin( adminpass, @@ -873,14 +896,16 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { channel_name, "vote", res, - function(exists) { + function (exists) { if (!exists) { res.status(404).send(error.not_found.list); return; } - db.collection(channel_name).find( - { id: video_id, now_playing: false }, - function(err, song) { + db.collection(channel_name).find({ + id: video_id, + now_playing: false + }, + function (err, song) { if ( song.length == 0 || (song.hasOwnProperty("type") && @@ -894,17 +919,21 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { } else { song[0].votes += 1; song[0].guids.push(guid); - db.collection(channel_name).update( - { id: video_id }, - { - $inc: { votes: 1 }, + db.collection(channel_name).update({ + id: video_id + }, { + $inc: { + votes: 1 + }, $set: { added: Functions.get_time(), type: "video" }, - $push: { guids: guid } + $push: { + guids: guid + } }, - function(err, success) { + function (err, success) { if (authorized) { incrementToken(token); } @@ -916,13 +945,11 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { List.getNextSong( channel_name, undefined, - function() { - //updateTimeout(guid, res, authorized, "PUT", function(err, docs) { + function () { var to_return = error.no_error; to_return.results = song; res.status(200).send(to_return); return; - //}); } ); } @@ -939,13 +966,15 @@ router.route("/api/list/:channel_name/:video_id").put(function(req, res) { }); }); -router.route("/api/list/:channel_name/__np__").post(function(req, res) { +router.route("/api/list/:channel_name/__np__").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); try { var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( @@ -955,12 +984,12 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { var userpass; if (req.body.hasOwnProperty("userpass")) { req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); userpass = req.body.userpass; } else { userpass = ""; @@ -973,9 +1002,8 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { var result = { userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -984,14 +1012,15 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.userpass == "") { - //userpass = Functions.hash_pass(Functions.hash_pass(Functions.decrypt_string(_u))) userpass = _u; } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -1007,22 +1036,22 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "POST", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "POST", function () { if (token != "" && !authorized) { - //updateTimeout(guid, res, authorized, "POST", function(err, docs) { res.status(400).send(error.wrong_token); return; - //}); } else { - db.collection(channel_name).find( - { now_playing: true }, + db.collection(channel_name).find({ + now_playing: true + }, projects.toShowChannel, - function(err, list) { + function (err, list) { if (list.length > 0) { - db.collection(channel_name + "_settings").find( - { id: "config" }, - function(err, conf) { + db.collection(channel_name + "_settings").find({ + id: "config" + }, + function (err, conf) { if (authorized) { incrementToken(token); } @@ -1037,7 +1066,6 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { res.status(403).send(error.not_authenticated); return; } - //updateTimeout(guid, res, authorized, "POST", function(err, docs) { var to_return = error.no_error; if (list[0].source == undefined) { list[0].source = "youtube"; @@ -1051,7 +1079,6 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { to_return.results = list; res.status(200).send(to_return); return; - //}); } ); } else { @@ -1067,13 +1094,15 @@ router.route("/api/list/:channel_name/__np__").post(function(req, res) { }); }); -router.route("/api/search/:channel_name/").post(function(req, res) { +router.route("/api/search/:channel_name/").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); try { var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( @@ -1083,12 +1112,12 @@ router.route("/api/search/:channel_name/").post(function(req, res) { var userpass; if (req.body.hasOwnProperty("userpass")) { req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); userpass = req.body.userpass; } else { userpass = ""; @@ -1117,9 +1146,8 @@ router.route("/api/search/:channel_name/").post(function(req, res) { var result = { userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -1128,14 +1156,15 @@ router.route("/api/search/:channel_name/").post(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.userpass == "") { - //userpass = Functions.hash_pass(Functions.hash_pass(Functions.decrypt_string(_u))) userpass = _u; } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -1151,11 +1180,12 @@ router.route("/api/search/:channel_name/").post(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "POST", function() { - db.collection(channel_name + "_settings").find( - { id: "config" }, - function(err, conf) { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "POST", function () { + db.collection(channel_name + "_settings").find({ + id: "config" + }, + function (err, conf) { if (authorized) { incrementToken(token); } @@ -1183,7 +1213,10 @@ router.route("/api/search/:channel_name/").post(function(req, res) { queryObject.title.$options = "i"; } var query = db.collection(channel_name).find(queryObject); - paginate(query, { limit: 30, page: page }, function( + paginate(query, { + limit: 30, + page: page + }, function ( err, result ) { @@ -1211,13 +1244,15 @@ router.route("/api/search/:channel_name/").post(function(req, res) { }); }); -router.route("/api/list/:channel_name/:video_id").post(function(req, res) { +router.route("/api/list/:channel_name/:video_id").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var fetch_only = false; if (req.body.hasOwnProperty("fetch_song")) { fetch_only = true; @@ -1249,12 +1284,12 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { var userpass; if (req.body.hasOwnProperty("userpass")) { req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); userpass = req.body.userpass; } else { userpass = ""; @@ -1263,14 +1298,14 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { var video_id = req.params.video_id; if (!fetch_only) { var adminpass = - req.body.adminpass == "" - ? "" - : Functions.hash_pass( - crypto - .createHash("sha256") - .update(req.body.adminpass, "utf8") - .digest("hex") - ); + req.body.adminpass == "" ? + "" : + Functions.hash_pass( + crypto + .createHash("sha256") + .update(req.body.adminpass, "utf8") + .digest("hex") + ); var duration = parseInt(req.body.duration); var start_time = parseInt(req.body.start_time); var end_time = parseInt(req.body.end_time); @@ -1297,45 +1332,36 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { var result = { adminpass: { expected: "string", - got: req.body.hasOwnProperty("adminpass") - ? typeof req.body.adminpass - : undefined + got: req.body.hasOwnProperty("adminpass") ? + typeof req.body.adminpass : undefined }, userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined }, title: { expected: "string", - got: req.body.hasOwnProperty("title") - ? typeof req.body.title - : undefined + got: req.body.hasOwnProperty("title") ? + typeof req.body.title : undefined }, start_time: { expected: "number or string that can be cast to int", - got: !req.body.hasOwnProperty("start_time") - ? undefined - : isNaN(req.body.start_time) - ? "uncastable string" - : typeof req.body.start_time + got: !req.body.hasOwnProperty("start_time") ? + undefined : isNaN(req.body.start_time) ? + "uncastable string" : typeof req.body.start_time }, end_time: { expected: "number or string that can be cast to int", - got: !req.body.hasOwnProperty("end_time") - ? undefined - : isNaN(req.body.end_time) - ? "uncastable string" - : typeof req.body.end_time + got: !req.body.hasOwnProperty("end_time") ? + undefined : isNaN(req.body.end_time) ? + "uncastable string" : typeof req.body.end_time }, duration: { expected: "number or string that can be cast to int", - got: !req.body.hasOwnProperty("duration") - ? undefined - : isNaN(req.body.duration) - ? "uncastable string" - : typeof req.body.duration + got: !req.body.hasOwnProperty("duration") ? + undefined : isNaN(req.body.duration) ? + "uncastable string" : typeof req.body.duration } }; var to_send = error.formatting; @@ -1344,7 +1370,7 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.adminpass == "") { adminpass = Functions.hash_pass(_a); } @@ -1353,7 +1379,9 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -1369,13 +1397,11 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "POST", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "POST", function () { if (token != "" && !authorized) { - //updateTimeout(guid, res, authorized, "POST", function(err, docs) { res.status(400).send(error.wrong_token); return; - //}); } else { var type = fetch_only ? "fetch_song" : "add"; validateLogin( @@ -1384,8 +1410,10 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { channel_name, type, res, - function(exists, conf, authenticated) { - db.collection(channel_name).find({ id: video_id }, function( + function (exists, conf, authenticated) { + db.collection(channel_name).find({ + id: video_id + }, function ( err, result ) { @@ -1395,9 +1423,10 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { res.status(404).send(error.not_found.local); return; } - db.collection(channel_name).find( - { now_playing: true }, - function(err, now_playing) { + db.collection(channel_name).find({ + now_playing: true + }, + function (err, now_playing) { var set_np = false; if (now_playing.length == 0 && authenticated) { set_np = true; @@ -1431,7 +1460,7 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { new_song.thumbnail = "https://img.youtube.com/vi/404_notfound/mqdefault.jpg"; } - runFunction = function( + runFunction = function ( new_song, foo_2, foo_3, @@ -1441,10 +1470,10 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { }; } else if (source == "youtube") new_song.thumbnail = - "https://img.youtube.com/vi/" + - new_song.id + - "/mqdefault.jpg"; - runFunction(new_song, channel_name, false, function( + "https://img.youtube.com/vi/" + + new_song.id + + "/mqdefault.jpg"; + runFunction(new_song, channel_name, false, function ( element, found ) { @@ -1453,9 +1482,10 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { return; } new_song = element; - db.collection("frontpage_lists").find( - { _id: channel_name }, - function(err, count) { + db.collection("frontpage_lists").find({ + _id: channel_name + }, + function (err, count) { var create_frontpage_lists = false; if (count.length == 0) { create_frontpage_lists = true; @@ -1478,33 +1508,37 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { }; db.collection( channel_name + "_settings" - ).insert(configs, function(err, docs) { + ).insert(configs, function (err, docs) { io.to(channel_name).emit("conf", configs); }); } - db.collection(channel_name).update( - { id: new_song.id }, - new_song, - { upsert: true }, - function(err, success) { + db.collection(channel_name).update({ + id: new_song.id + }, + new_song, { + upsert: true + }, + function (err, success) { if (authorized) { incrementToken(token); } if (create_frontpage_lists) { - db.collection("frontpage_lists").update( - { + db.collection("frontpage_lists").update({ _id: channel_name, count: authenticated ? 1 : 0, frontpage: true, accessed: Functions.get_time(), viewers: 1 + }, { + upsert: true }, - { upsert: true }, - function(err, docs) { + function (err, docs) { if (authenticated) { io.to(channel_name).emit( - "channel", - { type: "added", value: new_song } + "channel", { + type: "added", + value: new_song + } ); } else { io.to(channel_name).emit( @@ -1525,16 +1559,16 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { ); } else if (set_np) { var thumbnail = - req.body.thumbnail != undefined - ? req.body.thumbnail - : undefined; + req.body.thumbnail != undefined ? + req.body.thumbnail : + undefined; Frontpage.update_frontpage( channel_name, video_id, title, thumbnail, source, - function() { + function () { io.to(channel_name).emit("np", { np: [new_song], conf: [conf] @@ -1551,16 +1585,20 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { } ); } else { - db.collection("frontpage_lists").update( - { _id: channel_name }, - { - $inc: { count: authenticated ? 1 : 0 } + db.collection("frontpage_lists").update({ + _id: channel_name + }, { + $inc: { + count: authenticated ? 1 : 0 + } }, - function(err, docs) { + function (err, docs) { if (authenticated) { io.to(channel_name).emit( - "channel", - { type: "added", value: new_song } + "channel", { + type: "added", + value: new_song + } ); } else { io.to(channel_name).emit( @@ -1606,17 +1644,18 @@ router.route("/api/list/:channel_name/:video_id").post(function(req, res) { }); }); -router.route("/api/list/:channel_name").get(function(req, res) { +router.route("/api/list/:channel_name").get(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var channel_name = cleanChannelName(req.params.channel_name); db.collection(channel_name).aggregate( - [ - { + [{ $match: { type: { $ne: "suggested" @@ -1626,19 +1665,27 @@ router.route("/api/list/:channel_name").get(function(req, res) { { $project: projects.project_object }, - { $sort: { now_playing: -1, votes: -1, added: 1, title: 1 } } + { + $sort: { + now_playing: -1, + votes: -1, + added: 1, + title: 1 + } + } ], - function(err, docs) { + function (err, docs) { var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( req.get("User-Agent") + ip + req.headers["accept-language"] ); //db.collection(channel_name).find({views: {$exists: false}}, projects.toShowChannel, function(err, docs) { - checkTimeout(guid, res, false, "GET", function() { + checkTimeout(guid, res, false, "GET", function () { if (docs.length > 0) { - db.collection(channel_name + "_settings").find( - { id: "config" }, - function(err, conf) { + db.collection(channel_name + "_settings").find({ + id: "config" + }, + function (err, conf) { if (conf.length == 0) { res.status(404).send(error.not_found.list); return; @@ -1662,32 +1709,39 @@ router.route("/api/list/:channel_name").get(function(req, res) { ); }); -router.route("/api/list/:channel_name/:video_id").get(function(req, res) { +router.route("/api/list/:channel_name/:video_id").get(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( req.get("User-Agent") + ip + req.headers["accept-language"] ); - checkTimeout(guid, res, false, "GET", function() { + checkTimeout(guid, res, false, "GET", function () { var channel_name = cleanChannelName(req.params.channel_name); var video_id = req.params.video_id; - var searchQuery = { id: video_id }; + var searchQuery = { + id: video_id + }; if (video_id == "__np__") { - searchQuery = { now_playing: true }; + searchQuery = { + now_playing: true + }; } db.collection(channel_name).find( searchQuery, projects.toShowChannel, - function(err, docs) { - db.collection(channel_name + "_settings").find( - { id: "config" }, - function(err, conf) { + function (err, docs) { + db.collection(channel_name + "_settings").find({ + id: "config" + }, + function (err, conf) { if (conf.length == 0) { res.status(404).send(error.not_found.list); return; @@ -1720,23 +1774,24 @@ router.route("/api/list/:channel_name/:video_id").get(function(req, res) { }); }); -router.route("/api/conf/:channel_name").get(function(req, res) { +router.route("/api/conf/:channel_name").get(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); var ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; var guid = Functions.hash_pass( req.get("User-Agent") + ip + req.headers["accept-language"] ); - checkTimeout(guid, res, false, "GET", function() { + checkTimeout(guid, res, false, "GET", function () { var channel_name = cleanChannelName(req.params.channel_name); db.collection(channel_name + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -1745,7 +1800,7 @@ router.route("/api/conf/:channel_name").get(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if ( docs.length > 0 && (docs[0].userpass == "" || docs[0].userpass == undefined) @@ -1780,13 +1835,15 @@ router.route("/api/conf/:channel_name").get(function(req, res) { }); }); -router.route("/api/conf/:channel_name").post(function(req, res) { +router.route("/api/conf/:channel_name").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); try { var token = ""; @@ -1801,12 +1858,12 @@ router.route("/api/conf/:channel_name").post(function(req, res) { var userpass; if (req.body.hasOwnProperty("userpass")) { req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); userpass = req.body.userpass; } else { userpass = ""; @@ -1815,9 +1872,8 @@ router.route("/api/conf/:channel_name").post(function(req, res) { var result = { userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -1826,7 +1882,7 @@ router.route("/api/conf/:channel_name").post(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.userpass == "") { userpass = crypto .createHash("sha256") @@ -1836,7 +1892,9 @@ router.route("/api/conf/:channel_name").post(function(req, res) { token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -1852,8 +1910,8 @@ router.route("/api/conf/:channel_name").post(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "POST", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "POST", function () { if (token != "" && !authorized) { //updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { res.status(400).send(error.wrong_token); @@ -1861,8 +1919,7 @@ router.route("/api/conf/:channel_name").post(function(req, res) { //}); } else { db.collection(channel_name + "_settings").aggregate( - [ - { + [{ $match: { id: "config" } @@ -1871,7 +1928,7 @@ router.route("/api/conf/:channel_name").post(function(req, res) { $project: projects.toShowConfig } ], - function(err, docs) { + function (err, docs) { if (docs.length > 0 && docs[0].userpass == userpass) { var conf = docs[0]; if (conf.adminpass != "") { @@ -1914,7 +1971,9 @@ function checkOveruseApiToken(authorized, token_docs, res, callback) { return; } - db.collection("timeout_api").find({ guid: token_docs[0].token }, function( + db.collection("timeout_api").find({ + guid: token_docs[0].token + }, function ( e, doc ) { @@ -1925,37 +1984,48 @@ function checkOveruseApiToken(authorized, token_docs, res, callback) { var now = new Date(); var retry_in = (date.getTime() - now.getTime()) / 1000; if (this_doc.used >= token_docs[0].limit && retry_in > 0) { - res.header({ "Retry-After": retry_in }); + res.header({ + "Retry-After": retry_in + }); res.status(429).send(error.tooMany); return; } else { var updateElement = {}; if (retry_in <= 0) { - updateElement["$set"] = { createdAt: new Date(), used: 1 }; + updateElement["$set"] = { + createdAt: new Date(), + used: 1 + }; } else { - updateElement["$inc"] = { used: 1 }; + updateElement["$inc"] = { + used: 1 + }; } - db.collection("timeout_api").update( - { guid: token_docs[0].token }, + db.collection("timeout_api").update({ + guid: token_docs[0].token + }, updateElement, - function(e, d) { + function (e, d) { callback(); } ); } } else { - db.collection("timeout_api").update( - { guid: token_docs[0].token }, - { + db.collection("timeout_api").update({ + guid: token_docs[0].token + }, { $set: { guid: token_docs[0].token, createdAt: new Date(), type: "ALL" }, - $inc: { used: 1 } + $inc: { + used: 1 + } + }, { + upsert: true }, - { upsert: true }, - function(e, d) { + function (e, d) { callback(); } ); @@ -1963,13 +2033,15 @@ function checkOveruseApiToken(authorized, token_docs, res, callback) { }); } -router.route("/api/list/:channel_name").post(function(req, res) { +router.route("/api/list/:channel_name").post(function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); - res.header({ "Content-Type": "application/json" }); + res.header({ + "Content-Type": "application/json" + }); try { var token = ""; if (req.body.hasOwnProperty("token")) { @@ -1983,27 +2055,22 @@ router.route("/api/list/:channel_name").post(function(req, res) { var userpass; if (req.body.hasOwnProperty("userpass")) { req.body.userpass = - req.body.userpass == "" - ? "" - : crypto - .createHash("sha256") - .update(req.body.userpass, "utf8") - .digest("base64"); + req.body.userpass == "" ? + "" : + crypto + .createHash("sha256") + .update(req.body.userpass, "utf8") + .digest("base64"); userpass = req.body.userpass; } else { userpass = ""; } - - /*if(typeof(userpass) != "string") { - throw "Wrong format"; - }*/ } catch (e) { var result = { userpass: { expected: "string", - got: req.body.hasOwnProperty("userpass") - ? typeof req.body.userpass - : undefined + got: req.body.hasOwnProperty("userpass") ? + typeof req.body.userpass : undefined } }; var to_send = error.formatting; @@ -2013,15 +2080,16 @@ router.route("/api/list/:channel_name").post(function(req, res) { return; } var cookie = req.cookies._uI; - Functions.getSessionAdminUser(cookie, channel_name, function(_u, _a) { + Functions.getSessionAdminUser(cookie, channel_name, function (_u, _a) { if (req.body.userpass == "") { - //userpass = Functions.hash_pass(Functions.hash_pass(Functions.decrypt_string(_u))) userpass = _u; } token_db .collection("api_token") - .find({ token: token }, function(err, token_docs) { + .find({ + token: token + }, function (err, token_docs) { var authorized = false; var origin; try { @@ -2037,32 +2105,39 @@ router.route("/api/list/:channel_name").post(function(req, res) { ) { authorized = true; } - checkOveruseApiToken(authorized, token_docs, res, function() { - checkTimeout(guid, res, authorized, "POST", function() { + checkOveruseApiToken(authorized, token_docs, res, function () { + checkTimeout(guid, res, authorized, "POST", function () { if (token != "" && !authorized) { - //updateTimeout(guid, res, authorized, "POST", function(err, docs) { res.status(400).send(error.wrong_token); return; - //}); } else { db.collection(channel_name).aggregate( - [ - { + [{ $match: { type: { $ne: "suggested" } } }, - { $project: projects.project_object }, - { $sort: { now_playing: -1, votes: -1, added: 1, title: 1 } } + { + $project: projects.project_object + }, + { + $sort: { + now_playing: -1, + votes: -1, + added: 1, + title: 1 + } + } ], - function(err, list) { + function (err, list) { //db.collection(channel_name).find({views: {$exists: false}}, projects.toShowChannel, function(err, list) { if (list.length > 0) { - db.collection(channel_name + "_settings").find( - { id: "config" }, - function(err, conf) { + db.collection(channel_name + "_settings").find({ + id: "config" + }, + function (err, conf) { if (conf.length == 0) { res.status(404).send(error.not_found.list); return; @@ -2101,10 +2176,16 @@ router.route("/api/list/:channel_name").post(function(req, res) { function incrementToken(token) { token_db .collection("api_token") - .update({ token: token }, { $inc: { usage: 1 } }, function(err, doc) {}); + .update({ + token: token + }, { + $inc: { + usage: 1 + } + }, function (err, doc) {}); } -router.route("/api/color").post(function(req, res) { +router.route("/api/color").post(function (req, res) { try { var origin = req .get("origin") @@ -2132,7 +2213,7 @@ router.route("/api/color").post(function(req, res) { List.sendColor(false, undefined, req.body.id, true, res); }); -router.route("/api/imageblob").post(function(req, res) { +router.route("/api/imageblob").post(function (req, res) { var Jimp = require("jimp"); try { var origin = req @@ -2157,7 +2238,7 @@ router.route("/api/imageblob").post(function(req, res) { Jimp.read( "https://img.youtube.com/vi/" + req.body.id + "/mqdefault.jpg", - function(err, image) { + function (err, image) { if (err) { console.log(err); res.sendStatus(404); @@ -2170,7 +2251,7 @@ router.route("/api/imageblob").post(function(req, res) { pathThumbnails, "/public/assets/images/thumbnails/" + req.body.id + ".jpg" ), - function(e, r) { + function (e, r) { res.status(200).send(req.body.id + ".jpg"); return; } @@ -2193,7 +2274,7 @@ try { router .route("/api/apply") - .post(recaptcha.middleware.verify, function(req, res) { + .post(recaptcha.middleware.verify, function (req, res) { if (req.body.email == "" || req.body.email == undefined) { res.send("failed"); return; @@ -2213,22 +2294,25 @@ try { .digest("hex"); token_db .collection("api_token") - .find({ name: name }, function(err, results_find) { + .find({ + name: name + }, function (err, results_find) { var token = ""; if (results_find.length > 0) { token = results_find[0].token; } token_db .collection("api_links") - .find({ token: token }, function(e, d) { + .find({ + token: token + }, function (e, d) { if ( results_find.length == 0 || (d.length == 0 && results_find.length > 0 && !results_find[0].active) ) { - token_db.collection("api_token").insert( - { + token_db.collection("api_token").insert({ name: name, origin: origin, token: id, @@ -2236,7 +2320,7 @@ try { active: false, limit: 20 }, - function(err, docs) { + function (err, docs) { createApiLink(req, res, uniqid_link, id, name); } ); @@ -2254,16 +2338,22 @@ try { function createApiLink(req, res, uniqid_link, id, name) { token_db .collection("api_links") - .insert({ id: uniqid_link, token: id, createdAt: new Date() }, function( + .insert({ + id: uniqid_link, + token: id, + createdAt: new Date() + }, function ( err, docs ) { let transporter = nodemailer.createTransport(mailconfig); - transporter.verify(function(error, success) { + transporter.verify(function (error, success) { if (error) { token_db .collection("api_links") - .remove({ id: uniqid_link }, function(e, d) { + .remove({ + id: uniqid_link + }, function (e, d) { res.send("failed"); return; }); @@ -2299,11 +2389,11 @@ try { router .route("/api/mail") - .post(recaptcha.middleware.verify, function(req, res) { + .post(recaptcha.middleware.verify, function (req, res) { if (req.recaptcha.error == null) { let transporter = nodemailer.createTransport(mailconfig); - transporter.verify(function(error, success) { + transporter.verify(function (error, success) { if (error) { res.sendStatus(500); return; @@ -2342,7 +2432,7 @@ try { console.log( "(!) Missing file - /config/mailconfig.js Have a look at /config/mailconfig.example.js. " ); - router.route("/api/mail").post(function(req, res) { + router.route("/api/mail").post(function (req, res) { console.log( "Someone tried to send a mail, but the mailsystem hasn't been enabled.." ); @@ -2356,17 +2446,19 @@ function updateTimeout(guid, res, authorized, type, callback) { callback(null, null); return; } - db.collection("timeout_api").update( - { type: type, guid: guid }, - { + db.collection("timeout_api").update({ + type: type, + guid: guid + }, { $set: { createdAt: new Date(), type: type, guid: guid } + }, { + upsert: true }, - { upsert: true }, - function(err, docs) { + function (err, docs) { callback(err, docs); } ); @@ -2377,19 +2469,20 @@ function checkTimeout(guid, res, authorized, type, callback) { callback(); return; } - db.collection("timeout_api").find( - { + db.collection("timeout_api").find({ type: type, guid: guid }, - function(err, docs) { + function (err, docs) { if (docs.length > 0) { var date = new Date(docs[0].createdAt); date.setSeconds(date.getSeconds() + 1); var now = new Date(); var retry_in = (date.getTime() - now.getTime()) / 1000; if (retry_in > 0) { - res.header({ "Retry-After": retry_in }); + res.header({ + "Retry-After": retry_in + }); var thisErrorString = JSON.stringify(error.tooMany); var thisError = JSON.parse(thisErrorString); thisError.error += @@ -2399,17 +2492,19 @@ function checkTimeout(guid, res, authorized, type, callback) { } } var now_date = new Date(); - db.collection("timeout_api").update( - { type: type, guid: guid }, - { + db.collection("timeout_api").update({ + type: type, + guid: guid + }, { $set: { createdAt: now_date, type: type, guid: guid } + }, { + upsert: true }, - { upsert: true }, - function(err, docs) { + function (err, docs) { callback(); return; } @@ -2428,7 +2523,9 @@ function cleanChannelName(channel_name) { } function validateLogin(adminpass, userpass, channel_name, type, res, callback) { - db.collection(channel_name + "_settings").find({ id: "config" }, function( + db.collection(channel_name + "_settings").find({ + id: "config" + }, function ( err, conf ) { @@ -2452,9 +2549,9 @@ function validateLogin(adminpass, userpass, channel_name, type, res, callback) { type == "fetch_song" || (type == "add" && ((conf[0].addsongs && - (conf[0].adminpass == "" || - conf[0].adminpass == undefined || - conf[0].adminpass == adminpass)) || + (conf[0].adminpass == "" || + conf[0].adminpass == undefined || + conf[0].adminpass == adminpass)) || !conf[0].addsongs)) || (type == "delete" && (conf[0].adminpass == "" || @@ -2462,9 +2559,9 @@ function validateLogin(adminpass, userpass, channel_name, type, res, callback) { conf[0].adminpass == adminpass)) || (type == "vote" && ((conf[0].vote && - (conf[0].adminpass == "" || - conf[0].adminpass == undefined || - conf[0].adminpass == adminpass)) || + (conf[0].adminpass == "" || + conf[0].adminpass == undefined || + conf[0].adminpass == adminpass)) || !conf[0].vote)) || (type == "config" && (conf[0].adminpass == "" || @@ -2493,7 +2590,7 @@ function postEnd( if (configs != undefined) { io.to(channel_name).emit("conf", configs); } - List.getNextSong(channel_name, undefined, function() { + List.getNextSong(channel_name, undefined, function () { //updateTimeout(guid, res, authorized, "POST", function(err, docs) { var to_return = error.no_error; if (!authenticated) { @@ -2507,4 +2604,4 @@ function postEnd( }); } -module.exports = _exports; +module.exports = _exports; \ No newline at end of file diff --git a/server/routing/client/icons_routing.js b/server/routing/client/icons_routing.js index f2e1e1b9..7b95f703 100644 --- a/server/routing/client/icons_routing.js +++ b/server/routing/client/icons_routing.js @@ -1,27 +1,32 @@ +import { + pathThumbnails +} from "../settings/globals"; + + var express = require("express"); const path = require("path"); var router = express.Router(); -router.use(function(req, res, next) { +router.use(function (req, res, next) { next(); // make sure we go to the next routes and don't stop here }); -router.route("/favicon.ico").get(function(req, res, next) { +router.route("/favicon.ico").get(function (req, res, next) { res.sendFile(path.join(pathThumbnails, "/public/assets/images/favicon.ico")); }); -router.route("/browserconfig.xml").get(function(req, res, next) { +router.route("/browserconfig.xml").get(function (req, res, next) { res.sendFile( path.join(pathThumbnails, "/public/assets/images/browserconfig.xml") ); }); -router.route("/apple-touch-icon.png").get(function(req, res, next) { +router.route("/apple-touch-icon.png").get(function (req, res, next) { res.sendFile( path.join(pathThumbnails, "/public/assets/images/apple-touch-icon.png") ); }); -router.route("/apple-touch-icon-precomposed.png").get(function(req, res, next) { +router.route("/apple-touch-icon-precomposed.png").get(function (req, res, next) { res.sendFile( path.join( pathThumbnails, @@ -30,4 +35,4 @@ router.route("/apple-touch-icon-precomposed.png").get(function(req, res, next) { ); }); -module.exports = router; +module.exports = router; \ No newline at end of file diff --git a/server/routing/client/router.js b/server/routing/client/router.js index 60a910b7..69ba618a 100644 --- a/server/routing/client/router.js +++ b/server/routing/client/router.js @@ -1,3 +1,7 @@ +import { + pathThumbnails +} from "../settings/globals"; + var express = require("express"); var router = express.Router(); var path = require("path"); @@ -9,7 +13,6 @@ var adsense = "xx"; var adds = false; var mongojs = require("mongojs"); var token_db = mongojs("tokens"); -var Functions = require(pathThumbnails + "/handlers/functions.js"); var Frontpage = require(pathThumbnails + "/handlers/frontpage.js"); var db = require(pathThumbnails + "/handlers/db.js"); @@ -50,28 +53,28 @@ try { }; } -router.use(recaptcha.middleware.render, function(req, res, next) { +router.use(recaptcha.middleware.render, function (req, res, next) { next(); // make sure we go to the next routes and don't stop here }); -router.route("/:channel_name").get(function(req, res, next) { +router.route("/:channel_name").get(function (req, res, next) { channel(req, res, next); }); -router.route("/r/:base64data").get(function(req, res, next) { +router.route("/r/:base64data").get(function (req, res, next) { var channelToRedirect = Buffer.from(req.params.base64data, "base64"); res.redirect("/" + channelToRedirect); }); -router.route("/").get(function(req, res, next) { +router.route("/").get(function (req, res, next) { root(req, res, next); }); -router.route("/").post(function(req, res, next) { +router.route("/").post(function (req, res, next) { root(req, res, next); }); -router.route("/api/embed").get(function(req, res, next) { +router.route("/api/embed").get(function (req, res, next) { var data = { year: year, type: "video", @@ -85,11 +88,11 @@ router.route("/api/embed").get(function(req, res, next) { res.render("layouts/client/embed", data); }); -router.route("/api/oauth").get(function(req, res, next) { +router.route("/api/oauth").get(function (req, res, next) { res.sendFile(path.join(pathThumbnails, "/public/assets/html/callback.html")); }); -router.route("/api/apply").get(function(req, res, next) { +router.route("/api/apply").get(function (req, res, next) { var data = { year: year, javascript_file: "token.min.js", @@ -108,17 +111,25 @@ router.route("/api/apply").get(function(req, res, next) { res.render("layouts/client/token", data); }); -router.route("/api/apply/:id").get(function(req, res) { +router.route("/api/apply/:id").get(function (req, res) { var id = req.params.id; - token_db.collection("api_links").find({ id: id }, function(err, result) { + token_db.collection("api_links").find({ + id: id + }, function (err, result) { if (result.length == 1) { - token_db.collection("api_links").remove({ id: id }, function(e, d) { + token_db.collection("api_links").remove({ + id: id + }, function (e, d) { token_db .collection("api_token") - .update( - { token: result[0].token }, - { $set: { active: true } }, - function(e, d) { + .update({ + token: result[0].token + }, { + $set: { + active: true + } + }, + function (e, d) { var data = { year: year, javascript_file: "token.min.js", @@ -161,12 +172,12 @@ router.route("/api/apply/:id").get(function(req, res) { function root(req, res, next) { try { - var url = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"] - : req.headers.host.split(":")[0]; - var subdomain = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"].split(".") - : req.headers.host.split(":")[0].split("."); + var url = req.headers["x-forwarded-host"] ? + req.headers["x-forwarded-host"] : + req.headers.host.split(":")[0]; + var subdomain = req.headers["x-forwarded-host"] ? + req.headers["x-forwarded-host"].split(".") : + req.headers.host.split(":")[0].split("."); if (subdomain[0] == "remote") { var data = { year: year, @@ -202,8 +213,10 @@ function root(req, res, next) { if (subdomain[0] == "client") { data.client = true; } - Frontpage.get_frontpage_lists(function(err, docs) { - db.collection("connected_users").find({ _id: "total_users" }, function( + Frontpage.get_frontpage_lists(function (err, docs) { + db.collection("connected_users").find({ + _id: "total_users" + }, function ( err, tot ) { @@ -228,12 +241,12 @@ function root(req, res, next) { function channel(req, res, next) { try { - var url = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"] - : req.headers.host.split(":")[0]; - var subdomain = req.headers["x-forwarded-host"] - ? req.headers["x-forwarded-host"].split(".") - : req.headers.host.split(":")[0].split("."); + var url = req.headers["x-forwarded-host"] ? + req.headers["x-forwarded-host"] : + req.headers.host.split(":")[0]; + var subdomain = req.headers["x-forwarded-host"] ? + req.headers["x-forwarded-host"].split(".") : + req.headers.host.split(":")[0].split("."); if (subdomain[0] == "remote") { var data = { year: year, @@ -285,4 +298,4 @@ function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } -module.exports = router; +module.exports = router; \ No newline at end of file diff --git a/server/settings/globals.js b/server/settings/globals.js new file mode 100644 index 00000000..a531761a --- /dev/null +++ b/server/settings/globals.js @@ -0,0 +1,6 @@ +import * as path from "path"; +import version from "../VERSION"; + +export const publicPath = path.join(__dirname, "public"); +export const pathThumbnails = __dirname; +export const VERSION = version; \ No newline at end of file diff --git a/server/start.js b/server/start.js new file mode 100644 index 00000000..05dd751a --- /dev/null +++ b/server/start.js @@ -0,0 +1,7 @@ +// Transpile all code following this line with babel and use '@babel/preset-env' (aka ES6) preset. +require("@babel/register")({ + presets: ["@babel/preset-env"] +}); + +// Import the rest of our application. +module.exports = require('./app.js') \ No newline at end of file