From 9d632c07bedba2ff52b6b8e39275250ff978c0b7 Mon Sep 17 00:00:00 2001 From: bingus_violet Date: Thu, 19 Dec 2024 02:13:15 -0600 Subject: [PATCH] Function --- .vscode/settings.json | 3 + constants.js | 8 + frontend.js | 12 + index.js | 1 + package-lock.json | 1113 ++++++++++++++++++++ package.json | 20 + pageUpdater.js | 54 + scraper.js | 29 + static/fonts/rubik-v28-latin-600.woff2 | Bin 0 -> 19096 bytes static/fonts/rubik-v28-latin-regular.woff2 | Bin 0 -> 18856 bytes static/index.html | 17 + static/spin/index.html | 17 + static/style.css | 138 +++ 13 files changed, 1412 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 constants.js create mode 100644 frontend.js create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pageUpdater.js create mode 100644 scraper.js create mode 100644 static/fonts/rubik-v28-latin-600.woff2 create mode 100644 static/fonts/rubik-v28-latin-regular.woff2 create mode 100644 static/index.html create mode 100644 static/spin/index.html create mode 100644 static/style.css diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3566077 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "vscord.app.privacyMode.enable": true +} \ No newline at end of file diff --git a/constants.js b/constants.js new file mode 100644 index 0000000..2381226 --- /dev/null +++ b/constants.js @@ -0,0 +1,8 @@ +import * as path from "path" +import { fileURLToPath } from "url" + +export const flavors = ["#reflectivedetective", "#alearfred"] +export const variety = 200 +export const PORT = process.env.PORT || 8080 +export const __dirname = path.dirname(fileURLToPath(import.meta.url)) +export const staticPath = path.join(__dirname, "static") \ No newline at end of file diff --git a/frontend.js b/frontend.js new file mode 100644 index 0000000..2686c56 --- /dev/null +++ b/frontend.js @@ -0,0 +1,12 @@ +import { PORT, staticPath } from "./constants.js" +import express from "express" +import { middleware } from "./pageUpdater.js" + +export const app = express() + +app.use(middleware) +app.use(express.static(staticPath)) + +app.listen(PORT, () => { + console.log("THE AWESOMEST YAOI GENERATOR OF ALL TIME is now listening on port: " + PORT) +}) \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..8876fd1 --- /dev/null +++ b/index.js @@ -0,0 +1 @@ +import "./frontend.js" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..49b3dc6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1113 @@ +{ + "name": "dandys-world-yaoi-spinner", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dandys-world-yaoi-spinner", + "version": "1.0.0", + "license": "Unlicense", + "dependencies": { + "@the-convocation/twitter-scraper": "^0.14.1", + "express": "^4.21.2" + } + }, + "node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.32.35", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.32.35.tgz", + "integrity": "sha512-Ul3YyOTU++to8cgNkttakC0dWvpERr6RYoHO2W47DLbFvrwBDJUY31B1sImH6JZSYc4Kt4PyHtoPNu+vL2r2dA==", + "license": "MIT" + }, + "node_modules/@the-convocation/twitter-scraper": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@the-convocation/twitter-scraper/-/twitter-scraper-0.14.1.tgz", + "integrity": "sha512-GAObQtzoZ51WzFurJqA7RqKHNoYR5/t+FMXrS6UF7YsfX0YpMt9fx+0JR98RvhyT8ZIHNobaVYDBaciVklzmKA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.32.20", + "cross-fetch": "^4.0.0-alpha.5", + "headers-polyfill": "^3.1.2", + "json-stable-stringify": "^1.0.2", + "otpauth": "^9.2.2", + "set-cookie-parser": "^2.6.0", + "tough-cookie": "^4.1.2", + "tslib": "^2.5.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/headers-polyfill": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.3.0.tgz", + "integrity": "sha512-5e57etwBpNcDc0b6KCVWEh/Ro063OxPvzVimUdM0/tsYM/T7Hfy3kknIGj78SFTOhNd8AZY41U8mOHoO4LzmIQ==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.0.tgz", + "integrity": "sha512-ex8jk9BZHBolvbd5cRnAgwyaYcYB0qZldy1e+LCOdcF6+AUmVZ6LcGUMzsRTW83QMeu+GxZGrcLqxqrgfXGvIw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/otpauth": { + "version": "9.3.6", + "resolved": "https://registry.npmjs.org/otpauth/-/otpauth-9.3.6.tgz", + "integrity": "sha512-eIcCvuEvcAAPHxUKC9Q4uCe0Fh/yRc5jv9z+f/kvyIF2LPrhgAOuLB7J9CssGYhND/BL8M9hlHBTFmffpoQlMQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.6.1" + }, + "funding": { + "url": "https://github.com/hectorm/otpauth?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0eb571c --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "dandys-world-yaoi-spinner", + "version": "1.0.0", + "description": "Bruhh where am I???", + "main": "index.js", + "type": "module", + "scripts": { + "start": "node index.js" + }, + "repository": { + "type": "git", + "url": "https://git.viois.gay/Violet/Dandys-World-Yaoi-Spinner" + }, + "author": "Violet", + "license": "Unlicense", + "dependencies": { + "@the-convocation/twitter-scraper": "^0.14.1", + "express": "^4.21.2" + } +} diff --git a/pageUpdater.js b/pageUpdater.js new file mode 100644 index 0000000..2bd4f0f --- /dev/null +++ b/pageUpdater.js @@ -0,0 +1,54 @@ +import * as path from "path" +import * as fs from "fs" +import { staticPath } from "./constants.js" +import { flavors, variety } from "./constants.js" +import { getYaoi } from "./scraper.js" + +export async function middleware(req, res, next) { + var filePath = (req.baseUrl + req.path).trim() + + if (!filePath.includes(".")) { + if (filePath.charAt(filePath.length - 1) != '/') { + res.redirect(filePath + '/') + return + } + filePath = path.join(filePath, '/index.html') + } + + filePath = path.join(staticPath, filePath || 'index.html') + if (fs.existsSync(filePath) && filePath.includes(".html")) { + var data = fs.readFileSync(filePath).toString() + + res.contentType(path.basename(filePath)) + + data = await converter(data) + + res.send(data) + } + else { + next() + } + +} + +export async function converter(html) { + var replacers = { + "FLAVOR_COUNT": flavors.length, + "VARIETY": variety, + "FLAVORS": flavors.join(", ").replace(/,(?=[^,]+$)/, ' &'), + "SPIN_BUTTON": `
S
P
I
N
`, + "YAOI": () => { + var yaoi = getYaoi() + + if (yaoi) { + return `
${yaoi.html}
` + } + } + } + + for (var key in replacers) { + html = html.replaceAll(`{${key}}`, replacers[key]) + } + + return html +} diff --git a/scraper.js b/scraper.js new file mode 100644 index 0000000..9b3d392 --- /dev/null +++ b/scraper.js @@ -0,0 +1,29 @@ +import { Scraper } from "@the-convocation/twitter-scraper" +import { flavors, variety } from "./constants.js" + +const scraper = new Scraper({ +}) + +await scraper.login(process.env.USERNAME, process.env.PASSWORD) + +export async function scrapeYaoi() { + var finalArray = [] + for (let flavor of flavors) { + console.log(flavor) + var search = scraper.searchTweets(flavor, variety, "media") + + for await (var value of search) { + if (value.html.includes("img")) { + finalArray.push(value) + } + } + } + return finalArray +} + +export var yaoiList = await scrapeYaoi() +export function getYaoi() { + var yaoi = yaoiList[Math.floor(Math.random() * yaoiList.length)] + + return yaoi +} \ No newline at end of file diff --git a/static/fonts/rubik-v28-latin-600.woff2 b/static/fonts/rubik-v28-latin-600.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b1afae725195a9550391f09c60832b3e2d5d8e52 GIT binary patch literal 19096 zcmXT-cQayOWME)m@S4FO0HXIKFfe!-L&QLQR4mnKC;i<@rZb5x!9F;|F~o(TrA&~6 ztMP0>awz?ob|f>Ac0JIkUg#YTOR4WBjq zZp>wu?lgFryeIYle@V`)6B6fdG5VxOrB+DDIcB&`a$TS0l`%>A^_FdYx2$(v-?r$t zR`!?PIH9La-Q0RRWa?rrop4*&o%lf_QttGr3$<1f`WZ17b}L=X{jssdeSW3Aa`vtF z`6|zBuASfc^q2K{hjkn$Cs;3!VA*lm`BZ`W#qYmuZx)}6X80$aHpN4$>U4WZ%#~^V z-F~&=tu^h-U;Zf<-`j0gtWEna8SqWfx32w&ik z&)|~rnLj-=?zSn*QUP<`K+OZ2Z1?QXd|$th&B`?7ox-BFDAr!ZypO3nqsx}9da=i^ zI)0jA@ICo!JjvS>4^KKOYZ?4i(fhVU?Jla+JE(R&{d?T=uc80?PQ3hj zM{=>7q-s*$dE+)kk><6roP07m9RI&o&%GxT6`eJ4>0U>T0*~o?=AT+xel;|N?O_2& z_n`;@y=Es5ljbiUKK$DfSF@$aOa4I7Wp=)V{mySn=M;TS(XE?xKk(1)%V#fXz2~tJ z;f-Nk(Be<(6x-IQoi|GU>gW5Z-%l=2nzPY~tYi4QV?a7|v zmn4@upKjUY#BueMhNP$D<~eiAqa(UY5;XlVh&9 z;rb4-sk*&F8*FQT8853ldi7^Ogn2G&E^kmTWj>Tzx!_ME<7`d~ z&JAJ?2O4S_P9H2-=)l9UNiU|Q#l3-tX^qPRQGfR~ezuuQ_ysBgxZ>=JniqB~_?5F# ze_QD5mwB@*+ZzJbxXe~;Q4~G$orQCThqeV*!Gi;T&o5Qm(Nl1bwa8TBtDs@D!@21t zN7(1we>08af_+vJqe3&ggfp{R%hRF@L3g~Lo^Z1Kc=5L~bhqvcyEbZww&sJB1P1djE_+pvnZ(l3BNb2Ut_VCGz|AxJNx^0bn$!pDHm48X=oKvslru;Ll7M!@eFm64g^6yLYo?4nNDD@Z7 zyj6DV%G-p^*UDxeQRIGf*wrl3X40kWuXjz~b!AqX_Q$N9(UoSQnX|t}*{^R6>zr;i zKf~i?c`Zk9Qi+ODtIMgC4_;=LeqW?JjccuyQ`xqcrn8N$T2=Yi#xSf1_$c6=pK;)Q z-08PPR&UG%&+DX|F1&5a`9JcS=GTL~5e^lMAL1)4;LLlvdZ19Zf)!< zU(_A@w#vNf(&c$y_lWO(Q<`6W{r7|Bi+e3hURlK7WhrW&aQ9(>K)bu_C!dxVmWq{* z9dSaF!dc$C_o=6}m@l7DID>7n!4&TX&KVt?BHw#*rm5cEQvGH5H@VvVJ>*sqH zjjKb7U-_>h_W!cGTlTNNTlMYLWbrB8za+2OmHR9jM(U$c?Fr6~5}$+Owk{hL>u-moZhnYy#D z-|HJwUoCqP`NUhY;zXdUzcpLCvdhFPC*wODLN#4SROIED*{q4Ktfx|q*4??$|+@5u8eQsm)U1jO#Z*9)G z#V+#*5Ipp4N67QLi~%WeW~&;cPQD7fd&uqS|83zLEl(-J22w5okp*y0^? zPS@|!TBm&X-+|Ecf7(B<+kU}$%Mt6a722z|pW@{6(_S5I{>WU=Y;uWM`NuF8M^z)w zW~-`e>r$V2&AgY_Y+a&jc+!(bFDg7%sw}f^_OCC-m=XMZQcH)@#*zVdo&p4{rC0sZ+&;p zC;z0Z-@3WQ?UOBawOi};%O6}4xc%3F=jh(KQ;19(w!k z%gir2xzEJz?QInL#2Nf!%D#!^dHgFpZDQ^{b^7$r)Wk@G^NA?aw8VYJA!>H!H|{*% zsmsQ;L|8R3IDXm8Q;PE^Dv27aa5A*N)Kz2Q+OocZsdK&u?*_5!@_i?rqLow^@JLu}W1|Vn){9qWLqu1!t7|E8X`jS!^7XQto%}q;2%~S6*xJ)c1GA zl*9XqthY*Pyw?6Nn-Z_FZJOmxrT;Ca+D(qf`!hIQrb#%LHSH)maOdQUFSECwk8Lqu zR;T%8eYx?!ymNn^u-y1<5>WT`>#nb7R95UsdJ*%m=D5G?odq*R?_aTwo~)T@+u5-3 zMEq%scQaXD=?bM6w`*2(-D)_MHTUBZkBtWk*;dCztIe@6DpYaW^mxhc8MBjAn3g2Y zSa8p;(`)-Dv+csqqMoMYc}aBXt37QI7ct1;xbr&XRl3x4yY*Y;{~eR(QfI%wo0YrHzb_69smXf?Zg(Eri4mn**4^hroh{9yE1 z>OV(La?z|6vvs51Jd$Uh>^d*>N=j8{$EnKI-bV5HY}p(1xBhE;CQ;(}r_!LhTVbNW z#VD)r7iJT@16dlKwppHUu=AMJq^V)JH{_dImAY}K5MP(yU-$f4)G)awP4}i@ z{Op5^JdJjW^#~LT`+9k*Dn}}CS3GUI%KvoPzD3TLwB9c>JDI)XV)b%SeQu%WA$`97 z8rQBJ-kr&1#Hl>1=&-5frCA=Qw5(Y>Y`X7MEeh1hP!sP=ou&Ov+Oyc>{-+gZo&I0* z%}?3$d*==R4UgHvZ)rvTiS)7)u=&JxM`DU-*j>pVd3xome{X)WEw9-wS;)Hitb(0h z4M&7-{n6WU>-0Xa{<&jA*C7T+hSM7qcPMQv)t zckjFOxJ_DZ*W*6VeP8FEocH6V$OaVwqbKt^7M@fT39&Gd5zxz<_DmvCLrG0xA;(mu zhc2CZM;};h)yXxccn@XswM*pM)L!INvt+;ff?EO2n(%vrL9XP35eD4&S(-K)ykJNh}L z9C>;Ie42SA^k#HkDq4Dy@8=24Wfn{PMSiX{VrP|6nxN3wEG8ROvLaxy)83UgTg#m; ztk|xg`%g^Wulw&K59RA~=c&o)mT-wq{@66#sWst4PP;<-U#|s?C7-ooj?Q0aR3~fS z`h9bF5|huNzwMi+CGQR0aDUVJN=CJ3n?B!Iq&%b4WP3zym&Asmh>bb|-)_I%w?XIG z?Hh@Fy4z-|TdzK_Cc)32qpR{SR~l>ZVT%`Qtj^4I{c^QzcWB~Kxxh%vZHL>I=Lfu> zb^2NH=JPoQ#lFp&hD@jQ)+O1iYs${QzED=wDq8!9U)VvWr0MUy_1#|XPyCT)mecm& z|MkmW#=r|7!ZsDLiKDi3QVS>asHXBJ1`X zs{N_O|5te7r>pZMHa_DBiM~GfU&`Lu3|&pnUP#P1v|&SGLdB0moMo*oDjG{to`@`R z>9+M%+@+*-)PUzg1-D$m2aXPp6UIhuFO&QBPnfzPc7E;ricrzDE(Q=8(MJ0%HXSaH|)X>ULA`H78jK#E`8TD_)b;ydR-{EU}(^qnD|(wod59Q`@G8)7bvJG z`bs_#S-7X6YgXGdzm^jnhXm&uZb>dY;X~D$;6y!_*gx-Iua>>MdQFaAS+U;wN9n8#4}4^&tIV9qD6xIh&1+>jX0y-! zd%v=oQQLLak(-lFrho*}Hs6d*(|v6tIsNq0qMK!23jbg4g#h zsW#X$WB%&2RC~)Ck^DbzZ#cu@)+?Fs|KqO8`7QZpdS)y>8-3u=v4cms8GR&_S}ary zG$k!vqcxX!&z+Yjk=QbGMr6dz8oAc**6?ILY*Cn-iiEtW2#31#>UmZ*!W}e1@Mp;)cbJ3i*jl zR`ox;M7@N+c`Qjznz`{)ZFs8Z^SZZPv!oxL+!lUPd}~A8g_aiAZ4-Z(@kMM2dA?XG z>Jlegr{r3v+*_qDt}Ko2|EJx&B#wot(c!}1m$&B$XmDOv5;gP#$63-^mX|{5D!vAr zH*DHiyydP|oi$@j0S9OImc{FitWoJvZ4XIt06E+_!&ynVAye8od42c&3X!Dpul4Z) zuU}>aa-YaL$uX&!7wmZNpezoXtW-76%RW01f!j8`pL^wp)+8aXe*_9{f z@@00ed7FOTJ+yf3$HfL2eR4d!XOCegGd{gIj(|g3Jsf!^rFbbSFJF+9l9ZO1n*2Otx9A=#M)iY=Dmt60JzuOk zQ)+If7P&8I-^Bt0`>USEn}ubcZp?gMVEtj@#I>86q&Tg)Sh$*%n;4V&ez!Oo8~M+k zd2#(*)>SG^3zAqICvCMP7?Uh=XvFI4Y)AzS+Bl&j0eOPpWWUQ}1UTUvha z|26YF>(nBanf*&$y&~w8&0m|dm1k6i%PZe?+f0$maavMzWK#xLu3{fE1H(gdEVZDc>9tmORu&)i${UmQ{S;msy3X1#v$sk1guw08t~ z2wdiz`0|B@8ty3nu60hSTmDgfnn9J$N0uYm+IrG*)(=}xP1N?^*R*qjSD=ew z<0hTwuPrPmZQ7!?t2BP;BBzymiljvE%;gEnUQAzbm~5SOB=Zn^Uw=*fo$HR`-mxNvQZM8)g^wm}jL;G5KI)wnk(xNy?xZTCe%gxX5&6@986XTw#SGBv=dJEgGmt*_C*CTNb$3KiJ(?bn;Z{|ar8+uSbo{vyudR2nQlVj;|Gsg z8(epY%@nX!KRLz8&95+Gx3uMBM`%gB=ZTgbMmNYZ{XqH4I)O9cKh+ntc z;8#)fZPw?F-?CX)n)Fn3jHXmtw{@OY6*xIjv+Qz`Ic8~g6g z=?Yt{R(zy&aaVH3<4UKeCGC$sm50BLoi6?HNbB;~;eBz!_gpHY1Ck8CA6!g`PGD0!z(NLYEu6D-rsci zcf=n3AL|P3_IQUW=`Yyne!t$U=D@x`ZWlLu*=3!a|NB_j-RF$X$MbA*FKoWdze~a2 z<#UOWtO|~B*UO!l@mwj)0LoP$MS3G;+C%w5 zx%y%4(fzZRWX_W7vwp{AxN4dZ3*!V8&watGjIM?D72kVlv8=pi`{78vn5D7h=8rg! zU#?jDxlHNGTMLt|MjJ!QS`U9;D}4K)gGShyi#(o_R6HjwnKmmTm*F5&tK7DG{x6)5 zpZ9MoY7q@i*U*Cum`MY;K(IdgS4!;^I!6DHo#eGxhD*!n*f7E>Gr-R-{rdE#5k(qsSsqk8!X z?e(+%y*Pf;$o1Oc*T(bD*YlNpaGw#vUEtK^D7=W1MO@nGk&s5%_XUhc{GIlh9Z`Pa z;_~=~ML`m81;+zL2IlAfZ@J{MS@UGP_M%P)t^8;-w_FRW(?`BU?jx2sN7iE+Z`YB9%3*3&B-c!M>y771}i zmrUskzcj(>rCBM_fBd02`;QJvf6!VYEOi6@%d2gE!{2GD`kZK ze+m`M@c6JX;A`X5*-X>2g(9Z)KSX3C$;W%Cod?|*k_JoaZB!{XMy<_S}@StCMC0t8O8ckWGMSbgxDm$XAi4Bzhj z#jz^)?zR*voqRGoEpC^tk=(D!{3AYl>bFh}`*|cQd(GB!Rr7B>SX11&_j<3{&7AJF z+ivEy&n>fjf9ODj!r77Y}a(~@LYyVGD zahqP?#?n6Bfk|Oz!a_$bp7cn~$qnZ>ubLqKt0<9gl8tH%(<@8kuKu8v0=$cydA`NY zp34_%IxBc>3iQFuVys(Z++jw-eNs}>q4U)M!V1PF?6!WJZ5yT zD=ME|Y5aN5z3F;CPnP~~YZ9~uu|CvdRqNwYZyUN9&qNUU&C zS(5T(%AzA3qVDGv;+V8&yC|CTy0VoEdp??aN?pNwo6OFxshZ&ngQmKjjoOlRd0ljW zVU_Qf3-je%S(x{I+y4LO@&A9H<~r@4^(s{5L+|}bzm=IRUWPnUcpx4gY_afucJb$MSVX0RCBzi>6)=@>MQLRTnlKg!a4QQN@6JfJQ1yQJ?7^dnYQX`!cw9e; zYCJLbTAOA1s+W(cbXUm>lWP^eY8_V|v`(K_@oeXEg$q9tL>>4TR-A5l!+*w((c%GX zLnhl79*1W33!M&I1THESdB$5kP|=cj&p9R2YG%b`zE7d;oNqc7e0g+bmcvYU_GN_+ z*Ep#@xaOXGhgEVjUp$|LbHa0}Zs#>Q?+q3HvaS;{_u8Y|5o)o-`KI6}j?Nu7FP{H+ z=+j@}n7+fFx9mPnS7^(&EIFAr^~$oORa@_9upYa3aii)X)vm8WDw(T&WW=?@T`mWO zFIdHU%tq8)vU|x9nd4WDX8JG&uS&MsB60fAq7`O$^aZ9YwMa6_UE;4hW38O$g#~N2 zD*5d=xa`2qa^u!V;(sq~txsiQoqY6BfpSmMoK)+n-wm{ORM4-#A`i+YE6NjDAes{GK-9xxkwi-NKwq?iT&_frS8?GH^d1$6~ zt?I!c9@|M?Eyan4xp)5ZI9g+n?s+rrb=wQ6Nj*FlIZVW$}OkAH!DH1TmR^hk}&o)Ra`YqwrAG;eYw;~ zcdbm1+mw1Xx$gc=il0J{4%2IpF_7+*#b52%v zv2v3>W})s`p)+mv!ocm~7gcWSRZY1h_Si2iyHLYi?OI6T8kMin46G0DwoD8Aq4BXv za?`oSqDzmT`o8fGvG^f+YFhLKuST&+X5!l(#8$KS*TUON6EbyD`GM;jQ|PiFslWcC96_2QRGv=B1{+ zS}YgmzwrsZbne>A2Y~@utN3Rf<3Hy7Jtj;oB3pdVRh}nb&Rc6p%jlixH<;Xz*`e2V z>7&twE9nQfggk#Sb*9h)9%UdpyncWZXCL)o#yw?Fl7 z&ABoAuP>8x&(}v=-Av{>7!{T%Nr)|MyIrli{V+U$tI!7{$Ds=0BBvX6cG6jQ?Z$ z-F9D7UH$xubdR~=y1dpk!P!aC=8|7nS`X$_FSFp6o_6n1*X?`ruJ6mv>9JaAz9?zk+PH@%q-TX(YpU!v@yr@rL*}Z=YZr}Bp@gO-` zRK%2XA5XdeDG^o zcJMT&FH$vL2htKt6wfezPk3F1c9h07+` zZS|@x%CbpR$dG(@hc}1MD?vfVEyyHLBV6?UG>-}u-|Z0sQ*InQ#dG@LmCQb-`CXbJ z*PdnN+e{L?sgj=+YggP?9dq=-Wa*_Jw{j`YX2^RV6n6E!t3co-Mmy8uxV9A+C&@fr z(p(he-DGOZ7O8ZkNutj{Pvq%E`6m(aMXTmm?=?5r;jrP)NB0jE2D^M}gU|TvEamNd z6*Kp@(Ti(uHm>fjecos-*L%*PYW3|rHJ?uwSMO}i%|sgM-ue}KwkohrDBqzK`)j}DCKjvBo2=hWn4xg$&Xybb zX180nNrk=H>)BhJdV9x#w9NrZk(`AQYx%#ZYIa=yHqm_bp631M^B-TCn)5QGbMYqI zDe4mblVn#J7;bdS6yv@ef85Ee|NiPA%?s=*3wUy$HC<+2%*!X5 z_wlQ;fxU^Xk;1oaj!rK_OQ(LjH}~WBBU>62=7(+Cc&Fl&TAF;0V8Yf+KyZxn7uBOD_Ftj!1RZCMq!H_{u|2KtzDene5rnEbj>d9Io@1f7w9W(*?rvS z=b=9r3)KZe<+H4wGi71<$qGmToYBEt_W(eSg`Bh)y3;% z&bRv}R_;9YkIQ}X^6u>KGZlq0^90>AE*h=qIKQqYg$ykOE;FDDoXWy zR{D4K(aU6wx>weuWjo+nytTLn@aw@xVi$BeYbyp$XL{*`zM(ralwk8scRO?UV6U1 zW4~zS*QFmnPkkrf=XhhU^KsXh6=@A}8n=E`TrZREzAkk20TYX-xLy?3qc(wuDRLhT z(<%~NABTSRdAKBEOLKF)@%guhJq|5xeAu)){zk>W-b?u&|Gxxsv!BiJDB9gK*XC*d zH(PzS2SxlG(>G2IKXyO=^+S>W=1+qAUdp83nx81`c2-dL*2M|y=0-amS~5-YvX8f3 zCF_pcyR6qG)}C<5o4kOtZ;IOupX<6iwwlnzAI#%@5%l!i_FZ(8%Z~go>DQwHM zyKC00u+1wy!{PF24R_R9-!IeL|7}=fR^u`B7|kwpJg#@=@$Q?PDV97>mQFDBiqe>_ zX5{ltSXaH_-I1MkH^OB~j@tcSvaxs7u3fJbyZh%e-?QClWH`O^_s7pWW(GXeZ(Q_e zOM7pclys3 zwoltLc1iMIN}K8>xG2UwB4!I)G`sKftDkQtbi3*QmHU$V>gY?>cb9MOc`dW*v7^A& zc`G(;`FTv>g;kkP+2`nmKFxmIbF}l- z+^v74s^^`Z7;rP~)V@`Zi{OLgCycqw5>Z@m}ADtssYyXsSYqw}$+p87du3H3r z3n=I?54Um@GQ%0-$C=+dAtGdbHe-&QZ~htW*Z1xuD_P^W7#p zLm+#t!DXqr=bhOur1G|J`ro#6+meRsGdkM>931aoe>QF1zI!WA@-BSpUit5tySGWP zl97UnaYy3v*(aVb&J|J(wfPmGePLneV_p3niEi!Jje5MEPk$p^x%|_O{RUdzp1cMT zhUGW@_ldbzKYxEd&XKdx;b@V%NN?V)lVz4&&5B_b=9?xw%@$kPsI{afFe!m4rqAin zQeE}4K6<(nH7~0>Er2LW7FRzmO1HnerscNvWs|cKYqy@&QFPAhT6MJYaqqiZJfZ5Qj~{+YupyqGvzr*w0pBuFmnV;@2dUU(5=jy@uTyIgOrU z$0!-4#$KP{kahMP>;F|(yz-9%%r+0t%5xeI=OWHs&zrq5XTEdIkM zanbgzl0K21^AfI>C|9&wKe3QEBvv%^Tu+wQL)OCYv`$V|7 z>zpLrsyoX|_xs5DZ)WBTo>sA2zF(a`V>9!H()HK(UE7mt^19){$L-JEPaZnJ5UeM4 zoB!d$KfInntmRJxwr-!v_bfL~PqDy7b*B zU8J^csqIavb!M+Gz44w_zNOGeL*;X6@rlz)58h>DS%pr&7grQ*>cjqUih%szTa3j8 ztctqdtiM)WGhR^Volf#)}Sb`6rQh<4x=wCMQ-llbl4?g%&60 zuH}e3J@NSO)k$k-{^_!ilUn3GVXgbmJ!|W0Y`k+j9viKjuQ^era#fOEZ&nbubm|k< z`ly+kc0d0(E&fZ>)o9NIo+R( z?Y}M);;kyQ^49{l(#^A&G7~nwGz(B}+$iSG{HBHf+%5nMiTeD9(w?8ZvPH?+x>G{Lj|JL!_D|~mX>X~?3_0d<& z_(Q99Z4P>Q(@HeLi?c8(+N&e3ZN}8cJ*RcUtC?PA&AX#N<VBrbz+YZ*=`z9@CkqC3Jbq0_iTDT#ZY!&;H!_>lM$(n?1Kw z3zUCl{k(I_Rq#$2*UU-|x$Wr-`IHsz&xzV?Xs%?q@kmZeM0etr4WUaE^MVd#sMN>o z*(>+0!q?yp@Ab2LEN?n7&ut1+Gkeo{$$Qcrvt|zm^Gk=1vN`)ytmj;m-D1Odo#8pJ zuJTT&;*WkCtrl)@J~mJ5h)JTzoXJUoR&$q~jasy;cB9YKJ81&0mwLZ&Y;=?tPCTWw zxOe-4_H~ET=Ox*#);4i>I(wyL?%6qtrv*fd5?T44X=)okNed1z{c0G?`S)mH@z>nR zJD8UKlGU&~T_5h3X>$4j|K~kkvo)Q=E=p{)I(=r!>@$o<*lzhw3p%a#He_mG_ni3& z^@omsZqk~p862mnlk!l+VETL;<>0hUsV}Tds?L626_M%7pRF+Kd81qHLhV-Zcg}Jr zv|o$;eELg6#3oTgGx3;$Zoa&OW0052+3FWBtc!Zh&3}LTm^1N@qs8g%HFcG{wkdh7 z{vLYtm+&VR;dMq6CQSRadz0UpDO^u4O3b}(d*1n^UVrFO)gRF%lfEd`Up#Q-$}3ts47G4fHe#}g@ zwseN*ji9d5i>>RdC*P}YG177U_qOP#e2d$69C0+BLrWtb0(rTUR z4vuJs8Mi*gnEse;cA{O$u0 zHLZ8+w|YZtg~@uoj*@CK3L*$ z$~?ROORrswOzJhAV1Dybx~GNn>L}Nx38Ffe;ubTqOD$sW-uTZTtPKs~hDqY?4y71BI&K+08?{nA}>`XeXTy#)IIsAU3*x_fZ z<2yFIFj&WWY}LLTJsZ8C6HamSpT#C0Tv<1P@!6a1Q&Y0pg~KLKT5s_3|C|)DOK%vS z)|AIy%Kj|$Nvc!*y;#Xb#v3y?S=i*x7I76Q$e4dPJ9P3Em#z0_&3LhWRcF+sTiL#z zPgi)V7*1U9v|vljq8Uemn|+ShhdlpwdX=e00W&{qa7bkh@2)Lds$v%e$MCXNG)P}P zvHI>m53S2@rj?w?%rFVbIT^F*$UrjzbqGux+uVNI;{mQ2I-Y- z3A6ZqTjk!|l2TpSv-7}H-YY()%{$X`o#t*oaVH@(`06F@KPxZ4~qKot_J)rtZ&vvi-Culb0XYQfKziK&55D>Fb*BH5L8Z zbiu59pT{H5D^DW-%rgw0)F7@o^S#IGFP<&hW%?GMc7M0s8_X`!-&$*9aLx7KR+pKx z7HMy(*pvKwkLuq~o-w`Cj6L<{AGw%yMK_^vXYGlfoW=_eYdkU7XLNn$yB*Pc5?9YR zaAccg7W8bh_U1=9oIkBiW^K99ymrUwkQkF|KO8q6U0FNpy-w>k5%;qp*{;)zOntQ$ zuR9lZR`leOM?1YnzTv(ML^TGb=x=68jPEMI2k zwq%*v%G$itiHcEkyCBtOo|F++tcA+wCPEc+nWB6utcZz z?hTrA*2X=5ZD=QJ;i{?0G%NSA5Vw$$;VM2}PA5O@>8g6i@~&x4 z4e4G1?w>xf! zgj`A8aw~M-kN1zNORjy1)ZQIZeALpVIP}!j5b4~~X-oF0$cB60@z&KVJh*df^nzCY z;(KLwnqd`_O@BU%sJu~cyydpr3?0qC<$u2yMJ|ZA{r=?xiDQbh+U@gp`FB4(y7JP& zm4D~u)F)X?6q@_+`_IdNFFNH`Tv59`&!+6Sl$QV5qvcCG+=@A}CS~}FMr@Nl{BG)% zR?+R^r(a2L4!d|pBJGI5g8skdUMHpP)_#>B#J=U+{6=yEK3 z{$S@yiDicjHdOC_`uw!clX?EFHu46^zD(wSk|ciX=(AZawh797{Qp?u46(yqR9u!cN_X_<~pqOV8>5me*Y>@uinFcT82LDiC(;Ix=}Ck8LGc$XS!W>-tR2kW$kqN$uyUg7W)T9@-6?9d9=!lcPwey_58De z&ZCZbDRHi+db0l=-8G+y@141Y>I9WN+ds*(`d7SL6K7xGccS^fZoXKDV)`n@-sa@u zy2nj%@v7I1-ifJw7HHo*MRJ>n$$Q25f=CxGZ!o{Iv3qtJb8xf zOlxL$fynsNi@wFh{8)E@t?1$hHlBrz%0_83gfAH-DIO@;D=0hV?uR!#D@`}UGN|!0MFPJcKRm^ktr&sGwKCLf3AsXtkbIy#%zf$^w=1$diM~%{Fyx`-^o{E{jjT zW6Hf?%L%#V`({sNi%9H>snlD-@R4gnR5K6P;(fAK9P8&qiW={Kvp-?=Wr6+uu`9JN zzg9nXG*{!ju%%X2-O1<;NApfRj62S&vA9lX)-5ZWX~z4xU7pLcxD@P=+gsK$(Ngtb z@y?%BXZ3wHSj_*~{p`WRcMYsYbHDG|b4>Aq5JRk|q=O~f4OWf)#uoD&EQ?#$wLbmd z(l$Xk%gJcA`G=*EH-ip1&NyomV*cPy^2s;vTTaevj`mGhRd+&{}Uk9VG1an$lp7u^x#Z&z-*Tmy( zfZUu<6F&uHE%%f*shJhAu;ka%wf|n+eZK82|Mb@P_sfb)zi27@#qTT<7L>f=GbixR zw3xhU#;()PYiy0wTiZPQ>|Li9`$f%nEn|2-(Rc4uzxn@EKOSGRZ|B?11(iS2kDpuH z$#o)n&OWZGb35iaE}JLWZ$Ibo*)oeQm1m3!X9Pcgl2*uXc~YZ@VL=MB>XAaFy$oC| z7m7D6e_UCuxk>-2<9oZCds7&f+pUk_TKAPlz29)ctrOjRsr{2oPie>$ADi$x#=nt! z5sy*P#GWH29<$k0SSIcjkiDw^D(a|77h}OIu7b$y{KlR)m%U!uZe7BX<`r~llE#y1 z*^*BeDu^Cu5xIJzR_Rhod_wGmBc8TNzgs=8<(-OCUXgc*;p6vNQQy_>?tLt`$#1o) zz|x25CHsD*=CfN)x?{N2TxUk3JDbVznY)r>u7BoUH}lkqi;We3J{|kX{y4Vo>$*)_ zUa!{5%bt6Bhv}K!>l)^{WqKI*G=4Fv-Cwj%?CyeVff@6KEz|$|-kxtUt*W^+L34KX zjr`_Mr_cXyv;JLWo+75>qNOuyrkkpjcE7IfD|3-+XZtlZJ6;{DPUh7JUG~}HsnyT? z`^%%wYb|bSO3O8+o00{tmyW-jd^&iM z=)B!~Ka1M==ES5ez4uy&H^21;$JEc?EtxM*x3LjFuI2VkRkM!(Qz zDc74E&Np23?_S6|{JUF!e!i}N-j6vAF;@et7DYWt zT1Z;(CEgHdJGs()R#cacYo@bErCZ>Hz{gqlt+=@F-p(mq?EHPp+%$jxKR@i_KKmsz ztn=yi?C;?_a>UD{%Ec$fK&c`*Ilx##GI~YCVva+OFMYi_ghbL0@iR=Zf8h{6$FpSP znG-J_+>cr%k>S369>?^zzqC`IU&?8FoWi=0FSul1hq7M79{1=S%a6`YtW0U)nB28> z;;9SI8*QhE?Qwt6ws@b%>itW1oZZ&Q=66`(_S;81lYSpcc$~KL&xK=+ab@d|Jp97< zPkGYG*8e+_YrkR%@mW z%q!zw`OJ;l$Q82W+u5S9<=akg7FI5Pbb|ev^si-S*M_XU`INh1(a!}p#0zEyZ{2Qm ze@}(#x(2a}PWKzrXU9F3JQSi9eth58nYm2*9$l~Ym-&83ai09)tj1(p#}krzEgf%7 zjZd8^xY|0i%c$tpmoLjip8Id9oYlZCd1d3Xde7&ghHB0Foqb(q^9^>s+r7uEPGnc^ z=3QOOgVrY3`<%MC)yeQ#x+|ld>XC5!YqE^Wt)IJhBU}6XE2j5$yI2=GpOo>vwbHsfaKVr78-D0{9c7#`=S7+M zCh6yPLZ$^$cjm?U9lq25{EX~*Ir+ttbN|e-tkPdDURU;h&Z7c>KU0MkMPIpjQd7A+ zy>zREmabHH-KK@2qVuk+ZSl@qRXnMC_TS^?EIT!Rnw*-;e>LZ9@$ImEOT%AeDy~@( zV)*B=Y}8STU(Irzy9XpPUy8}cP5ZFqOOx@tGve21jY=?>F0Ib#4B~?EK4PRrzPZFKv& zxN({*o9c88#T<)UmA6iH=d(1ii%+dSDcYHD%T;?dx5icWbc*Ry?Jrz^jpuJ)`(DOt zkxME|jh$wv(5r+wkBgsgT3vS8z_d-i`p2tm3m4PCKZVC-W^K>C)fMIc`N@lCebc7> z6^hhfqq*q*%*A&^hbN;?@>R*gn z&I!r$E0n5gT&5O3mRuwhZ=kt&-UhR@*QdOfCgdI2^|$#q_d8+Ui{Z=MX56#UvN@R| za4syD@rQt)l!Mw ziW&2^X0;pZtulYO=$^_+r4N$7Esp$s#Q1SRg@=ufoM3;~@dp(T)kCI5&0$9s{c%Fo z!TX_7PI*$p-5~Qf8#~)y$(n?EChJA$v~cWO9>3$b_}NXdJK7oc1y?v5Y~R@NZ+k~# zWZus==FcqbXQqGKZ+nA3Q@&m0-G68QI5x3f{{Np}rTR2HmukK0e1EQVWvscZ z;iT|9`S`k%tTJWFIx-$jL z?Y36tlRhjz8hMQ-oY>c+-QT@P^1|yo`UMOLA1*Kjx_iABe)n@S!;fX@nNi=r^)c-8 zG(UMh_pHR9-@bLZ)0SLawtpVqwET;hg>dy~*`<_2ZBKhU&BFurPCcIP5+(Q~B@qJz6L3np?16;k4Y{ zP{sRY`iHq656UL9d<&g+-*x@H8QM<1`=`(N=CXn1b3?Hzc zO0~ChTGrnF%xkx+u=-1=zCyflj(O$!)wjJ1gjQ_hU2K-fuYOfzR%NI1Ij2cmizWJ5 zGVB-rEaC3p$ezEUSG7jVUB`2V%(I71_g-5Zong*td|b#P$vZvqo0{C>pukI(kNTY7 zKj5)lr7SsR!usyzcUgO+&ez4xmoJ;t`RqU(L;Z_DpXw6|Z)~Q``|#|ni}mCy9^q?G ztQEh{?_WDe4|6|`}tHA5t@;WK&-d%2GP_dufC$MLUV7o3`fclgv zQD^o=X@6EZo^svwSr7+z*Sh)pH!mvlcq4E?Uh;#_4&6rv&)7Y+4L2OTpFGbn=(TOq z#?MjhiTvv)U)H-(bKLr#r0j|+j`F7FB&C)o&I!6AH`ay*1T?X`{+@Y6{lE_PM`3Bq=h_R@^i-gt4HE;7Y-Q<&$dM$^Vl2j znz2uGo8PQA@BYCS!!nM;OIENkZjfQSSRp;Z)kKzMK|^*)M)2ZT2mdcNZkwZyzWVCs z>pv}j&D*uROLMH&O-`S4adPy@l!_DKR@U#XoYh;mCwi^k%ehsPj=V}se$-w1;*y5n zHWNvc&GAXcH*8!qwVXA0($>j_U8#$fPruR5cJE>6y|r`ph2^e0svUTK(%b9qt6bbp zB=_zzPrmZP%VL{OL*=7$bJboIwM)O0jIdjCU_l+9lCAsoqfuIMuV0o+s;j>D_@0$o zvT0XC+C7nX{h_mMZz^#gkb1iQx`Gf>$Go1)M=whD-w9$LcUwhAIS6784Z#i;1hl`=9glFHw>pw-`Y-DO%c>i6sZB?(iUs^>+!lz%e z=O~FhEKmHQn`tz9*1B0BB3Dr=a-r zRdFGqR)-ZQzsoA59Xe#h^*>&kTmMgsyFj9gpu13J%0zd;)Q~{;j4jr*F&`!y^*GX9_l|*l}(=rpD7e<49aZv}Vr7R?Ccz2$`FcJ0d3??kku+M?@rK zaftWBGlI+YYoD%2?z2wZZhOwMpJ8dsjO=YcpG79LX{|q7BBrUgdCjTbcjEbTRg~4Y z#`NaKR8Dy8n|0|?w|yhanS$V;8T3h}wsPj2k!^3LJP|7&A0{vsB7Rr1+vXIIQL*_?Lq z(N>nTQK_@nU*B!2yr0dp;c1JvzrG%0N-+=b!57i7@(kr0(@PmnE9%^FiHtto@nG!} z#)=r$L%sp0UH&Y)^n1d=LY=8q;y*Tv<#Kqd*-aLz>d7^Uh->Q2_6-$xl~TX<<=XYw zivmH$88Q9SzVt{0AMfXwDSf%;<7HpYK<%$wUpDIeO1+`9SL_hKvYX7cj_}x~y7=qH zA;zKY7vDbIcP8HY+T7=#mMj-L^6gs5&SPI*@XqP{`c`_IEobe5`UCnb3=9ka4UQrE literal 0 HcmV?d00001 diff --git a/static/fonts/rubik-v28-latin-regular.woff2 b/static/fonts/rubik-v28-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ac6ff6829dae9da06678d1a471f198ad247ea171 GIT binary patch literal 18856 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 + + + + + + + + Yaoi Spinner + + +

The Yaoi Spinner

+

Welcome to the awesomest Yaoi Spinner ever. You can gamble yaoi. Yup. #imstraight

+ {SPIN_BUTTON} +

All Yaoi is sourced from Twitter. Randomly chosen from a mix of {FLAVOR_COUNT} different searches! Currently searches for {VARIETY} posts each of {FLAVORS}

+ + \ No newline at end of file diff --git a/static/spin/index.html b/static/spin/index.html new file mode 100644 index 0000000..03a3e63 --- /dev/null +++ b/static/spin/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Yaoi Spinner + + + + {YAOI} + {SPIN_BUTTON} +

All Yaoi is sourced from Twitter. Randomly chosen from a mix of {FLAVOR_COUNT} different searches! Currently searches for {VARIETY} posts each of {FLAVORS}

+ + \ No newline at end of file diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..f00c82f --- /dev/null +++ b/static/style.css @@ -0,0 +1,138 @@ +:root { + --gay-erasure: 1 +} + +@font-face { + font-display: swap; + font-family: 'RubikBold'; + font-style: bold; + font-weight: 600; + src: url('./fonts/rubik-v28-latin-600.woff2') format('woff2'); +} + +@font-face { + font-display: swap; + font-family: 'Rubik'; + font-style: normal; + font-weight: 400; + src: url('./fonts/rubik-v28-latin-regular.woff2') format('woff2'); +} + +body { + background-color: rgb(20, 20, 60); + /* background: linear-gradient(145deg, rgb(30, 30, 80), rgb(0, 0, 0)); */ + + padding: 5px calc(5px + 5%); + + color: white; + text-align: center; + font-family: "Rubik", Verdana, Geneva, Tahoma, sans-serif; +} + +html { + min-height: 100%; +} + +h1 { + font-size: 3rem; +} + +p { + font-size: 1.2rem; +} + +#yaoiButton { + background: linear-gradient( + 90deg, + rgba(255, 0, 0, var(--gay-erasure)) 0%, + rgba(255, 154, 0, var(--gay-erasure)) 10%, + rgba(208, 222, 33, var(--gay-erasure)) 20%, + rgba(79, 220, 74, var(--gay-erasure)) 30%, + rgba(63, 218, 216, var(--gay-erasure)) 40%, + rgba(47, 201, 226, var(--gay-erasure)) 50%, + rgba(28, 127, 238, var(--gay-erasure)) 60%, + rgba(95, 21, 242, var(--gay-erasure)) 70%, + rgba(186, 12, 248, var(--gay-erasure)) 80%, + rgba(251, 7, 217, var(--gay-erasure)) 90%, + rgba(255, 0, 0, var(--gay-erasure)) 100% + ); + background-size: 300px auto; + background-position-x: 0px; + /* border: 2px white solid; + padding: 10px; */ + display: inline-block; + -webkit-text-stroke: white 3px; + font-size: 5rem; + animation-name: slidebg; + animation-duration: 2.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + font-weight: bold; + + background-clip: text; + -webkit-text-fill-color: transparent; + transition: transform 2s cubic-bezier(0.075, 0.82, 0.165, 1); +} + +#yaoiButton:hover { + transform: scale(1.1); +} + +#yaoiButton > div { + display: inline-block; + + animation-name: float; + animation-duration: 1s; + animation-iteration-count: infinite; + animation-direction: alternate; + animation-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95); + animation-fill-mode: both; +} + +#yaoiButton > div:nth-child(2) { + animation-delay: 0.25s; +} + +#yaoiButton > div:nth-child(3) { + animation-delay: 0.5s; +} + +#yaoiButton > div:nth-child(4) { + animation-delay: 0.75s; +} + +.post { + background-color: black; + border: 2px gray solid; + text-align: left; + padding: 5px 16px; + width: 600px; + margin: auto; +} + +img { + width: 100%; + border-radius: 16px; + margin: 16px auto; + object-fit: cover; +} + +@keyframes float { + from { + transform: translateY(-5px); + } + + to { + transform: translateY(5px); + } +} + +@keyframes slidebg { + from { + background-position-x: 0px; + } + + to { + background-position-x: 300px; + } +} \ No newline at end of file