From e78b92ebbbc725e1ad7730fa4b45c51a2e36d50e Mon Sep 17 00:00:00 2001 From: "Jonny_Bro (Nikita)" Date: Thu, 29 Aug 2024 09:48:27 +0500 Subject: [PATCH] first commit --- .ejsbrc.json | 4 + .gitignore | 68 + .prettierrc | 11 + LICENSE | 674 ++++++++ README.md | 25 + components/course_card.html | 70 + components/course_card_orig.html | 58 + components/footer.html | 6 + components/navbar.html | 84 + config.example.js | 18 + data/main_db.example.json | 12 + index.js | 277 ++++ package.json | 115 ++ pnpm-lock.yaml | 2452 ++++++++++++++++++++++++++++++ public/img/gm_construct.jpg | Bin 0 -> 140466 bytes public/img/gm_flatgrass.jpg | Bin 0 -> 28711 bytes public/img/unknown.jpg | Bin 0 -> 49493 bytes public/robots.txt | 7 + routes/admin.js | 13 + routes/api.js | 379 +++++ routes/index.js | 237 +++ routes/key.js | 52 + routes/stats.js | 33 + routes/upload.js | 13 + tailwind-files/input.css | 20 + tailwind.config.js | 13 + utils/functions.js | 165 ++ views/admin.ejs | 108 ++ views/error.ejs | 3 + views/index.ejs | 124 ++ views/key.ejs | 104 ++ views/stats.ejs | 77 + views/upload.ejs | 53 + 33 files changed, 5275 insertions(+) create mode 100644 .ejsbrc.json create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 LICENSE create mode 100644 README.md create mode 100644 components/course_card.html create mode 100644 components/course_card_orig.html create mode 100644 components/footer.html create mode 100644 components/navbar.html create mode 100644 config.example.js create mode 100644 data/main_db.example.json create mode 100644 index.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/img/gm_construct.jpg create mode 100644 public/img/gm_flatgrass.jpg create mode 100644 public/img/unknown.jpg create mode 100644 public/robots.txt create mode 100644 routes/admin.js create mode 100644 routes/api.js create mode 100644 routes/index.js create mode 100644 routes/key.js create mode 100644 routes/stats.js create mode 100644 routes/upload.js create mode 100644 tailwind-files/input.css create mode 100644 tailwind.config.js create mode 100644 utils/functions.js create mode 100644 views/admin.ejs create mode 100644 views/error.ejs create mode 100644 views/index.ejs create mode 100644 views/key.ejs create mode 100644 views/stats.ejs create mode 100644 views/upload.ejs diff --git a/.ejsbrc.json b/.ejsbrc.json new file mode 100644 index 0000000..d628e47 --- /dev/null +++ b/.ejsbrc.json @@ -0,0 +1,4 @@ +{ + "indent_size": 4, + "indent_with_tabs": true +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9a10608 --- /dev/null +++ b/.gitignore @@ -0,0 +1,68 @@ +# Custom +public/css/style.css +public/courses/* +data/* +config.js +!data/main_db.example.json + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..219e598 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,11 @@ +{ + "arrowParens": "avoid", + "bracketSpacing": true, + "endOfLine": "lf", + "printWidth": 250, + "semi": true, + "tabWidth": 4, + "trailingComma": "all", + "useTabs": true, + "parser": "babel" +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e72bfdd --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..55ffb13 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# Beatrun Courses Database + +Beatrun courses database written in JavaScript using [Node.js](https://nodejs.org).\ +This is project is a rewrite of this [fork](https://github.com/JonnyBro/beatrun-courses-server) from PHP to JavaScript. Original project was made by [relaxtakenotes](https://github.com/relaxtakenotes/beatrun-courses-server). + +## Installation + +```bash +git clone https://git.jonnybro.ru/jonny_bro/beatrun-courses-server-express courses-server +cd courses-server +mv config.example.js config.js +pnpm install +pnpm build +pnpm start +``` + +> [!NOTE] +> You also can use NPM as your package manager. + +## TODO + +* [X] Rewrite admin page. +* [X] Make admin page look better. +* [X] Refactor some stupid code that I will find. +* [ ] Add something else? (leaderboards???). diff --git a/components/course_card.html b/components/course_card.html new file mode 100644 index 0000000..72ec8aa --- /dev/null +++ b/components/course_card.html @@ -0,0 +1,70 @@ +
+ +
+ + +
+
+ {courseMap}
+ {elementsCount} +
+
+
+ + +
+
+
+
+

{courseName}

+
+ +
+
+ + {courseCode} +
+
+
+ +
+
+ + {uploadDate} +
+
+ + {plays} +
+
+
+ + + +
+
+ + + +
+
+
+ + + +
+
+
+
\ No newline at end of file diff --git a/components/course_card_orig.html b/components/course_card_orig.html new file mode 100644 index 0000000..305af7a --- /dev/null +++ b/components/course_card_orig.html @@ -0,0 +1,58 @@ +
+
+
+ +
+ +
+
+
+ {elementcount} +
+
+
+
+
+
+
+
+

{coursename}

+
+
+
+ + {coursecode} +
+
+
+ +
+
+
+ + {fdate} +
+
+
+ {likecount} + + / + {dislikecount} + +
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/components/footer.html b/components/footer.html new file mode 100644 index 0000000..21c7616 --- /dev/null +++ b/components/footer.html @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/components/navbar.html b/components/navbar.html new file mode 100644 index 0000000..83dc577 --- /dev/null +++ b/components/navbar.html @@ -0,0 +1,84 @@ + \ No newline at end of file diff --git a/config.example.js b/config.example.js new file mode 100644 index 0000000..bfc28df --- /dev/null +++ b/config.example.js @@ -0,0 +1,18 @@ +module.exports = { + /* Set true for production database */ + production: true, + /* Your domain without / at the end */ + domain: "http://localhost", + /* Port for the server */ + port: 6547, + /* How often can user send request to API */ + rateLimitTime: 1000 * 5, // 5 seconds + /* How often can user change IP address */ + ipChangeTime: 1000 * 60 * 60 * 3, // 3 hours + /* Your SteamAPI key */ + steamKey: "", + /* Secret for a cookie */ + cookieSecret: "", + /* Discord webhook url or leave empty */ + webhook_url: "", +}; \ No newline at end of file diff --git a/data/main_db.example.json b/data/main_db.example.json new file mode 100644 index 0000000..c20988b --- /dev/null +++ b/data/main_db.example.json @@ -0,0 +1,12 @@ +{ + "admins": { + "YOUR_STEAMID64": true + }, + "keys": {}, + "courses": {}, + "locked": {}, + "rating": {}, + "records": {}, + "usernames": {}, + "ratelimits": {} +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..19c2865 --- /dev/null +++ b/index.js @@ -0,0 +1,277 @@ +const express = require("express"), + path = require("path"), + session = require("express-session"), + logger = require("morgan"), + fs = require("fs"), + passport = require("passport"), + SteamStrategy = require("passport-steam").Strategy; + +const { JsonDB, Config } = require("node-json-db"), + { generateRandomString, log } = require("./utils/functions"); + +const config = require("./config"); +const db = new JsonDB(new Config(`data/${config.production ? "main" : "test"}_db`, true, true, "/")); + +if (!config.cookieSecret || !config.steamKey) return console.log("Please check that you have filled steamKey and cookieSecret in config file"); +if (!fs.existsSync("public/courses/")) fs.mkdirSync("public/courses/"); + +// Express App +const indexRouter = require("./routes/index"), + keyRouter = require("./routes/key"), + uploadRouter = require("./routes/upload"), + adminRouter = require("./routes/admin"), + apiRouter = require("./routes/api"), + statsRouter = require("./routes/stats"); + +const app = express(); + +/** + * Callback to serialize user into session. + * It is called at end of request in authenticate method after successful authentication. + * This method will store necessary data from the authenticated user object (`user`). + * @param {Object} user - The authenticated user. + * @param {Function} done - Callback to signal success or failure for saving session data. + */ +passport.serializeUser((user, done) => { + done(null, user._json); +}); + +/** + * Callback to deserialize user from session. + * It is called at the start of each request in authenticate method after receiving client's request. + * This method will reconstruct a User object (`user`) based on data stored during `serializeUser` call. + * @param {Object} obj - The serialized user data from session. + * @param {Function} done - Callback to signal success or failure for loading user. + */ +passport.deserializeUser((obj, done) => { + done(null, obj); +}); + +passport.use( + new SteamStrategy( + { + realm: config.domain, + returnURL: `${config.domain}/auth/return`, + apiKey: config.steamKey, + }, + (_, profile, done) => { + return done(null, profile); + }, + ), +); + +app.set("views", path.join(__dirname, "views")); +app.set("view engine", "ejs"); + +app.use(logger("dev")); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use( + session({ + secret: config.cookieSecret, + name: "U_SESSION", + resave: true, + saveUninitialized: true, + cookie: { + maxAge: 3600000, + }, + }), +); +app.use(passport.initialize()); +app.use(passport.session()); +app.use(express.static(path.join(__dirname, "public"))); + +app.use("/", indexRouter); +app.use("/key", keyRouter); +app.use("/upload", uploadRouter); +app.use("/admin", adminRouter); +app.use("/api", apiRouter); +app.use("/stats", statsRouter); +app.get("/auth", passport.authenticate("steam"), () => {}); +app.get("/auth/return", passport.authenticate("steam", { failureRedirect: "/" }), (req, res) => res.redirect("/key")); +app.get("/auth/logout", (req, res, next) => { + req.logout(function (err) { + if (err) return next(err); + + res.redirect("/key"); + }); +}); + +/* catch 404 and forward to error handler +app.use(function (req, res, next) { + next(createError(404)); +}); + +// Error Handler +app.use(function (err, req, res) { + res.status(err.status || 500); + res.render("error"); +}); +*/ + +// Locals +db.getData("/admins").then(data => { + app.locals.admins = data; +}); + +app.locals = { + config: config, + db: db, + getKey: getKey, + isRatelimited: isRatelimited, + isMultiAccount: isMultiAccount, +}; + +/** + * Gets a user's key from the database. + * + * Checks if the user already has a key, and returns it if so. + * Otherwise generates a new one. + * + * @param {Object | string} user The user object or SteamID64. + * @returns {Promise} The user's key. + */ +async function getKey(user) { + user = typeof user === "string" ? user : user.steamid; + + const keys = await db.getData("/keys"); + const key = keys[user]; + + if (key) { + await log( + `[KEY] User logged in (SteamID: ${user}, Key ${key}).`, + `[KEY] User logged in (SteamID: \`${user}\`, Key \`${key}\`).`, + ); + return key; + } else return await _createKey(user); +} + +/** + * Creates a new unique key for the given user and saves it to the database. + * + * @param {Object | string} user The OpenID Steam user object or SteamID64. + * @returns {Promise} The new unique key generated for the user. + */ +async function _createKey(user) { + user = typeof user === "string" ? user : user.steamid; + + const keys = await db.getData("/keys"); + const key = generateRandomString(); + const isFound = keys[key]; + + if (!isFound) { + keys[user] = key; + + const now = Date.now(); + + await log( + `[KEY] New user (SteamID: ${user}, Key: ${key}, TimeCreated: ${new Date(now).toLocaleString("ru-RU")}).`, + `[KEY] New user (SteamID: \`${user}\`, Key: \`${key}\`, TimeCreated: ).`, + ); + await db.push("/keys", keys); + + return key; + } else return await _createKey(user); +} + +/** + * Checks if an IP address is currently rate limited. + * + * Gets the current rate limits from the database. + * If the IP already has a recent rate limit, returns true. + * Otherwise, saves a new rate limit for the IP and returns false. + * + * @param {string} ip The IP address to check + * @returns {Promise} Whether the IP is currently rate limited + */ +async function isRatelimited(ip) { + const rateLimits = await db.getData("/ratelimits"); + + if (rateLimits[ip] && Date.now() - rateLimits[ip] <= config.rateLimitTime) return true; + + rateLimits[ip] = Date.now(); + + await db.push("/ratelimits", rateLimits); + + return false; +} + +/** + * Checks if a user is using multiple accounts based on their IP address and Steam ID. + * + * Retrieves the locked accounts and user records from the database. If the user's account is locked, returns true. + * Otherwise, checks if the user has changed their IP address more than the configured `ipChangeTime`. If so, clears the + * user's IP address history and locks the account if the user has changed their IP more than 3 times. Updates the + * database with the new account status and returns the result. + * + * @param {string} ip The IP address of the user. + * @param {string} steamid The Steam ID of the user. + * @returns {Promise} Whether the user is using multiple accounts. + */ +async function isMultiAccount(ip, steamid) { + const locked = await db.getData("/locked"); + const records = await db.getData("/records"); + + if (locked[steamid]) return true; + + if (!records[steamid]) + records[steamid] = { + ips: { + [ip]: true, + }, + lastchanged: Date.now(), + }; + + // Clear IPs if the user has changed their ip more than ipChangeTime + if (Date.now() - records[steamid]["lastchanged"] > config.ipChangeTime) { + records[steamid]["ips"] = []; + records[steamid]["lastchanged"] = Date.now(); + } + + // Lock account if the user changed their IP more than 3 time in ipChangeTime + if (Object.keys(records[steamid]["ips"]).length > 2) { + locked[steamid] = true; + + await db.push("/locked", locked); + return true; + } + + await db.push("/records", records); + + return false; +} + +// HTTP server +const http = require("http"); + +const port = config.port || 6547; +app.set("port", port); + +const server = http.createServer(app); + +server.listen(port); + +server.on("error", error => { + if (error.syscall !== "listen") throw error; + + // handle specific listen errors with friendly messages + switch (error.code) { + case "EACCES": + console.error(`Port ${port} requires elevated privileges`); + process.exit(1); + break; + case "EADDRINUSE": + console.error(`Port ${port} is already in use`); + process.exit(1); + break; + default: + throw error; + } +}); + +server.on("listening", () => { + const addr = server.address(); + const bind = typeof addr === "string" ? "pipe: " + addr : "port: " + addr.port; + + console.log("Now listening on " + bind); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..2d749f1 --- /dev/null +++ b/package.json @@ -0,0 +1,115 @@ +{ + "name": "beatrun-courses-server-express", + "version": "1.2.5", + "scripts": { + "build": "tailwindcss -i ./tailwind-files/input.css -o ./public/css/style.css", + "watch": "tailwindcss -i ./tailwind-files/input.css -o ./public/css/style.css --watch", + "start": "node ." + }, + "dependencies": { + "daisyui": "^4.11.1", + "ejs": "^2.6.1", + "express": "^4.16.1", + "express-session": "^1.18.0", + "formidable": "^2.1.2", + "lzma": "^2.3.2", + "morgan": "^1.9.1", + "node-fetch": "^2.7.0", + "node-json-db": "^2.3.0", + "open-graph-scraper": "^6.5.0", + "passport": "^0.7.0", + "passport-steam": "^1.0.18" + }, + "devDependencies": { + "eslint": "^8.57.0", + "prettier": "^3.2.5", + "tailwindcss": "^3.4.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "commonjs": true, + "es6": true, + "es2020": true, + "node": true + }, + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2020 + }, + "rules": { + "arrow-spacing": [ + "warn", + { + "before": true, + "after": true + } + ], + "comma-dangle": [ + "error", + "always-multiline" + ], + "comma-spacing": "error", + "comma-style": "error", + "dot-location": [ + "error", + "property" + ], + "handle-callback-err": "off", + "indent": [ + "error", + "tab", + { + "SwitchCase": 1 + } + ], + "keyword-spacing": "error", + "max-nested-callbacks": [ + "error", + { + "max": 4 + } + ], + "max-statements-per-line": [ + "error", + { + "max": 2 + } + ], + "no-console": "off", + "no-multi-spaces": "error", + "no-multiple-empty-lines": [ + "error", + { + "max": 2, + "maxEOF": 1, + "maxBOF": 0 + } + ], + "no-trailing-spaces": [ + "error" + ], + "no-var": "error", + "object-curly-spacing": [ + "error", + "always" + ], + "prefer-const": "error", + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ], + "space-in-parens": "error", + "space-infix-ops": "error", + "space-unary-ops": "error", + "yoda": "error" + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..5bd856c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2452 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + daisyui: + specifier: ^4.11.1 + version: 4.11.1(postcss@8.4.36) + ejs: + specifier: ^2.6.1 + version: 2.6.2 + express: + specifier: ^4.16.1 + version: 4.16.4 + express-session: + specifier: ^1.18.0 + version: 1.18.0 + formidable: + specifier: ^2.1.2 + version: 2.1.2 + lzma: + specifier: ^2.3.2 + version: 2.3.2 + morgan: + specifier: ^1.9.1 + version: 1.9.1 + node-fetch: + specifier: ^2.7.0 + version: 2.7.0 + node-json-db: + specifier: ^2.3.0 + version: 2.3.0 + open-graph-scraper: + specifier: ^6.5.0 + version: 6.5.0 + passport: + specifier: ^0.7.0 + version: 0.7.0 + passport-steam: + specifier: ^1.0.18 + version: 1.0.18 + devDependencies: + eslint: + specifier: ^8.57.0 + version: 8.57.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1 + +packages: + + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.2': + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@passport-next/passport-openid@1.0.0': + resolution: {integrity: sha512-W9uj4Ui/ZK/iBUNzSNxPWDQ8wCD1tUddGEVSGm0FN0B7ewo3yBQLGMoW3i3UqcwEzxdyGbAj06ohAhNQIXC4VA==} + engines: {node: '>=6'} + + '@passport-next/passport-strategy@1.1.0': + resolution: {integrity: sha512-2KhFjtPueJG6xVj2HnqXt9BlANOfYCVLyu+pXYjPGBDT8yk+vQwc/6tsceIj+mayKcoxMau2JimggXRPHgoc8w==} + engines: {node: '>= 6.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@1.18.3: + resolution: {integrity: sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==} + engines: {node: '>= 0.8'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chardet@2.0.0: + resolution: {integrity: sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + + cookie@0.3.1: + resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==} + engines: {node: '>= 0.6'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-selector-tokenizer@0.8.0: + resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + culori@3.3.0: + resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + daisyui@4.11.1: + resolution: {integrity: sha512-obT9CUbQdW6eoHwSeT5VwaRrWlwrM4OT5qlfdJ0oQlSIEYhwnEl2+L2fwu5PioLbitwuMdYC2X8I1cyy8Pf6LQ==} + engines: {node: '>=16.9.0'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@2.6.2: + resolution: {integrity: sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==} + engines: {node: '>=0.10.0'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + express-session@1.18.0: + resolution: {integrity: sha512-m93QLWr0ju+rOwApSsyso838LQwgfs44QtOP/WBiwtAgPIo/SAh1a5c6nn2BR6mFNZehTpqKDESzP+fRHVbxwQ==} + engines: {node: '>= 0.8.0'} + + express@4.16.4: + resolution: {integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==} + engines: {node: '>= 0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastparse@1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + finalhandler@1.1.1: + resolution: {integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==} + engines: {node: '>= 0.8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formidable@2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + iconv-lite@0.4.23: + resolution: {integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + lzma@2.3.2: + resolution: {integrity: sha512-DcfiawQ1avYbW+hsILhF38IKAlnguc/fjHrychs9hdxe4qLykvhT5VTGNs5YRWgaNePh7NTxGD4uv4gKsRomCQ==} + hasBin: true + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.4.1: + resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + morgan@1.9.1: + resolution: {integrity: sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==} + engines: {node: '>= 0.8.0'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-json-db@2.3.0: + resolution: {integrity: sha512-B8T+w4q6zXZ20YcfQINLSjMGgImRKzkvR0ShYYoNRdLxtMhVvbzaMBzNdEaRcCjilW/lKS+g9CwVXNoK5uTncw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + open-graph-scraper@6.5.0: + resolution: {integrity: sha512-stnJ6IINwdrt5HP26eIej3TKK/91dn/2NvZyvLS1HUpCeFqVOUCw67shYBOwSGqrRqD59z08RwbHXLArSNqpeA==} + engines: {node: '>=18.0.0'} + + openid@2.0.12: + resolution: {integrity: sha512-Mga9CvtLy3NXTWs6QZ1yhCbam9foyEL3PjCgjzBwDRWdjt10I9W7eVMx0RZ0MNJAkGJp72pawtr4C9CyUy+wPQ==} + engines: {node: '>= 0.6.0'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + passport-steam@1.0.18: + resolution: {integrity: sha512-3S6XlgATcJE3M3IfpwkvjWHeTDreaPUWQPykwxjv8LA5RtnfHrkt5c5HJdadYMCRHf3qh1OfCWETMxdpSdlBZA==} + engines: {node: '>= 0.4.0'} + + passport-strategy@1.0.0: + resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==} + engines: {node: '>= 0.4.0'} + + passport@0.7.0: + resolution: {integrity: sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==} + engines: {node: '>= 0.4.0'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + pause@0.0.1: + resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.36: + resolution: {integrity: sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + engines: {node: '>=0.6'} + + qs@6.5.2: + resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + random-bytes@1.0.0: + resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} + engines: {node: '>= 0.8'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.3.3: + resolution: {integrity: sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==} + engines: {node: '>= 0.8'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rwlock@5.0.0: + resolution: {integrity: sha512-XgzRqLMfCcm9QfZuPav9cV3Xin5TRcIlp4X/SH3CvB+x5D2AakdlEepfJKDd8ByncvfpcxNWdRZVUl38PS6ZJg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + send@0.16.2: + resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.13.2: + resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.1.0: + resolution: {integrity: sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==} + engines: {node: '>=0.10.0'} + + statuses@1.4.0: + resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} + engines: {node: '>= 0.6'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + steam-web@0.4.0: + resolution: {integrity: sha512-FgSYhL7GaP4Va5JKT09yZ+WrTZttFtLwenIPuZd7GUA1z3W7vu7qqPT/qTC76Pd9+sf85txMgIPr/y0+3gNlUA==} + engines: {'0': node >= 0.4.0} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + uid-safe@2.1.5: + resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} + engines: {node: '>= 0.8'} + + undici@6.10.1: + resolution: {integrity: sha512-kSzmWrOx3XBKTgPm4Tal8Hyl3yf+hzlA00SAf4goxv8LZYafKmS6gJD/7Fe5HH/DMNiFTRXvkwhLo7mUn5fuQQ==} + engines: {node: '>=18.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@alloc/quick-lru@5.2.0': {} + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.2': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@passport-next/passport-openid@1.0.0': + dependencies: + '@passport-next/passport-strategy': 1.1.0 + openid: 2.0.12 + transitivePeerDependencies: + - debug + + '@passport-next/passport-strategy@1.1.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@ungap/structured-clone@1.2.0': {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn@8.11.3: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + asap@2.0.6: {} + + asynckit@0.4.0: {} + + axios@1.6.8: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + + binary-extensions@2.3.0: {} + + body-parser@1.18.3: + dependencies: + bytes: 3.0.0 + content-type: 1.0.5 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.6.3 + iconv-lite: 0.4.23 + on-finished: 2.3.0 + qs: 6.5.2 + raw-body: 2.3.3 + type-is: 1.6.18 + transitivePeerDependencies: + - supports-color + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + bytes@3.0.0: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chardet@2.0.0: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + + cheerio@1.0.0-rc.12: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.2: {} + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie-signature@1.0.7: {} + + cookie@0.3.1: {} + + cookie@0.6.0: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-selector-tokenizer@0.8.0: + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + culori@3.3.0: {} + + daisyui@4.11.1(postcss@8.4.36): + dependencies: + css-selector-tokenizer: 0.8.0 + culori: 3.3.0 + picocolors: 1.0.0 + postcss-js: 4.0.1(postcss@8.4.36) + transitivePeerDependencies: + - postcss + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destroy@1.0.4: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + ejs@2.6.2: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + entities@4.5.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + express-session@1.18.0: + dependencies: + cookie: 0.6.0 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + on-headers: 1.0.2 + parseurl: 1.3.3 + safe-buffer: 5.2.1 + uid-safe: 2.1.5 + transitivePeerDependencies: + - supports-color + + express@4.16.4: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.18.3 + content-disposition: 0.5.2 + content-type: 1.0.5 + cookie: 0.3.1 + 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 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.5.2 + 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.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastparse@1.1.2: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.1.1: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.4.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + follow-redirects@1.15.6: {} + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formidable@2.1.2: + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.12.1 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.3.10: + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hexoid@1.0.0: {} + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + iconv-lite@0.4.23: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.3: {} + + ipaddr.js@1.9.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + isexe@2.0.0: {} + + jackspeak@2.3.6: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + lilconfig@3.1.1: {} + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@10.2.0: {} + + lzma@2.3.2: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.1: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.4.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.0.4: {} + + morgan@1.9.1: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 1.1.2 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + + ms@2.0.0: {} + + ms@2.1.2: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-json-db@2.3.0: + dependencies: + rwlock: 5.0.0 + + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.1: {} + + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-headers@1.0.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + open-graph-scraper@6.5.0: + dependencies: + chardet: 2.0.0 + cheerio: 1.0.0-rc.12 + iconv-lite: 0.6.3 + undici: 6.10.1 + validator: 13.11.0 + + openid@2.0.12: + dependencies: + axios: 1.6.8 + qs: 6.5.2 + transitivePeerDependencies: + - debug + + optionator@0.9.3: + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse5-htmlparser2-tree-adapter@7.0.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + parseurl@1.3.3: {} + + passport-steam@1.0.18: + dependencies: + '@passport-next/passport-openid': 1.0.0 + steam-web: 0.4.0 + transitivePeerDependencies: + - debug + + passport-strategy@1.0.0: {} + + passport@0.7.0: + dependencies: + passport-strategy: 1.0.0 + pause: 0.0.1 + utils-merge: 1.0.1 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.10.1: + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + + path-to-regexp@0.1.7: {} + + pause@0.0.1: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pirates@4.0.6: {} + + postcss-import@15.1.0(postcss@8.4.36): + dependencies: + postcss: 8.4.36 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.36): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.36 + + postcss-load-config@4.0.2(postcss@8.4.36): + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.36 + yaml: 2.4.1 + + postcss-nested@6.0.1(postcss@8.4.36): + dependencies: + postcss: 8.4.36 + postcss-selector-parser: 6.0.16 + + postcss-selector-parser@6.0.16: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.36: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.1.0 + + prelude-ls@1.2.1: {} + + prettier@3.2.5: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + qs@6.12.1: + dependencies: + side-channel: 1.0.6 + + qs@6.5.2: {} + + queue-microtask@1.2.3: {} + + random-bytes@1.0.0: {} + + range-parser@1.2.1: {} + + raw-body@2.3.3: + dependencies: + bytes: 3.0.0 + http-errors: 1.6.3 + iconv-lite: 0.4.23 + unpipe: 1.0.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rwlock@5.0.0: {} + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + send@0.16.2: + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.6.3 + mime: 1.4.1 + ms: 2.0.0 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.4.0 + transitivePeerDependencies: + - supports-color + + serve-static@1.13.2: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.16.2 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + 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 + + setprototypeof@1.1.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + + signal-exit@4.1.0: {} + + source-map-js@1.1.0: {} + + statuses@1.4.0: {} + + statuses@1.5.0: {} + + steam-web@0.4.0: + dependencies: + qs: 6.5.2 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-json-comments@3.1.1: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwindcss@3.4.1: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.36 + postcss-import: 15.1.0(postcss@8.4.36) + postcss-js: 4.0.1(postcss@8.4.36) + postcss-load-config: 4.0.2(postcss@8.4.36) + postcss-nested: 6.0.1(postcss@8.4.36) + postcss-selector-parser: 6.0.16 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-interface-checker@0.1.13: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + uid-safe@2.1.5: + dependencies: + random-bytes: 1.0.0 + + undici@6.10.1: {} + + unpipe@1.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + validator@13.11.0: {} + + vary@1.1.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + yaml@2.4.1: {} + + yocto-queue@0.1.0: {} diff --git a/public/img/gm_construct.jpg b/public/img/gm_construct.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba1a025169035dd421266e011aa77a56c10740a4 GIT binary patch literal 140466 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

Hps*F|0M^g%~&(OlLhbW)VMp!o$grWp+{;|IVH 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 literal 0 HcmV?d00001 diff --git a/public/img/gm_flatgrass.jpg b/public/img/gm_flatgrass.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c52cb6d6b0d7a017f6ce877cf91c9e14cd0d46c GIT binary patch literal 28711 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%0A`$>8+QqT)g=#r+|$ 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%0AIvYu z;wb%ZE*JCjujt$J4nE!a-mw0Ym$mG#x6AVTccIVxBbSALQs47lo9KPcH`DwU`P9Dc VxM|Mb7p(7Vm9+N!H#hui|JesBI*tGU literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..0d9ad82 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,7 @@ +User-agent: * +Disallow: /courses +Disallow: /courses/* +Disallow: /admin +Disallow: /admin/* +Disallow: /api +Disallow: /api/* diff --git a/routes/admin.js b/routes/admin.js new file mode 100644 index 0000000..7acb9ef --- /dev/null +++ b/routes/admin.js @@ -0,0 +1,13 @@ +const express = require("express"), + router = express.Router(); + +const { isAdmin } = require("../utils/functions"); + +router.get("/", isAdmin, async (req, res) => { + res.render("admin", { + user: req.user, + locals: req.app.locals, + }); +}); + +module.exports = router; diff --git a/routes/api.js b/routes/api.js new file mode 100644 index 0000000..a8d47b6 --- /dev/null +++ b/routes/api.js @@ -0,0 +1,379 @@ +const express = require("express"), + router = express.Router(), + fs = require("fs"), + openGraphScraper = require("open-graph-scraper"), + lzma = require("lzma"); + +const { isAdmin, isUser, isUserGame, generateCode, isCourseFileValid, log } = require("../utils/functions"), + { formidable } = require("formidable"); + +router.post("/", isUser, async (req, res) => { + res.send("Hello World!"); +}); + +router.get("/", isUser, async (req, res) => { + res.send("Hello World!"); +}); + +router.get("/download", isUserGame, async (req, res) => { + const { headers } = req; + if (!headers.code) return res.status(401).json({ res: res.statusCode, message: "No code provided. Please provide a valid course code." }); + if (!headers.map) return res.status(401).json({ res: res.statusCode, message: "No map provided. Please provide a valid map." }); + + const ip = headers["cf-connecting-ip"] || "Unknown"; + const key = headers.authorization; + const keys = await req.app.locals.db.getData("/keys"); + const steamIds = Object.fromEntries(Object.entries(keys).map(([k, v]) => [v, k])); + const steamid = steamIds[key]; + + if (ip !== "Unknown" && (await req.app.locals.isRatelimited(ip))) return res.status(401).json({ res: res.statusCode, message: "Too many requests. Please try again later." }); + if (ip !== "Unknown" && (await req.app.locals.isMultiAccount(ip, steamid))) return res.status(401).json({ res: res.statusCode, message: "Your account was detected as multiaccount. Please open a ticket on our Discord server." }); + + let courseData; + + try { + courseData = await req.app.locals.db.getData(`/courses/${headers.code.toUpperCase()}`); + } catch (e) { + return res.status(401).json({ res: res.statusCode, message: "Invalid course code provided." }); + } + + if (courseData.map !== headers.map) return res.status(401).json({ res: res.statusCode, message: "Invalid map. Please start a map that require by course you provided." }); + + const file = fs.readFileSync(`public/${courseData.path}`, "utf-8"); + + await log( + `[DOWNLOAD] Served a course for user (Course: ${headers.code.toUpperCase()}, SteamID: ${steamid}, Key ${key}).`, + `[DOWNLOAD] Served a course for user (Course: \`${headers.code.toUpperCase()}\`, SteamID: \`${steamid}\`, Key \`${key}\`).`, + ); + + if (!courseData.plays) courseData.plays = 1; + else courseData.plays++; + + await req.app.locals.db.push(`/courses/${headers.code.toUpperCase()}`, courseData); + + res.send({ res: res.statusCode, file: file }); +}); + +router.post("/upload", isUserGame, async (req, res) => { + const { headers } = req; + if (!headers.course) return res.status(401).json({ res: res.statusCode, message: "No course provided. Please provide a valid course." }); + if (!headers.map) return res.status(401).json({ res: res.statusCode, message: "No map provided. Please provide a valid map." }); + if (headers.mapid === null || headers.mapid === undefined) return res.status(401).json({ res: res.statusCode, message: "No map id provided. Please provide a valid map id." }); + + const ip = headers["cf-connecting-ip"] || "Unknown"; + const key = headers.authorization; + const keys = await req.app.locals.db.getData("/keys"); + const steamIds = Object.fromEntries(Object.entries(keys).map(([k, v]) => [v, k])); + const steamid = steamIds[key]; + + if (ip !== "Unknown" && (await req.app.locals.isRatelimited(ip))) return res.status(401).json({ res: res.statusCode, message: "Too many requests. Please try again later." }); + if (ip !== "Unknown" && (await req.app.locals.isMultiAccount(ip, steamid))) return res.status(401).json({ res: res.statusCode, message: "Your account was detected as multiaccount. Please open a ticket on our Discord server." }); + + let course = ""; + try { + course = lzma.decompress(Buffer.from(headers.course, "base64")); + } catch (e) { + course = Buffer.from(headers.course, "base64").toString("utf-8"); + } + + if (!isCourseFileValid(JSON.parse(course))) return res.status(401).json({ res: res.statusCode, message: "Invalid course file. Please provide a valid course." }); + + let code = generateCode(); + let file = `public/courses/${code}.txt`; + + do { + code = generateCode(); + file = `public/courses/${code}.txt`; + } while (fs.existsSync(file)); + + fs.writeFileSync(file, course, "utf-8"); + + const mapImage = headers.mapid === "0" || headers.mapid === "no_map_id" ? "" : await openGraphScraper({ url: `https://steamcommunity.com/sharedfiles/filedetails/?id=${headers.mapid}` }).then(data => data.result.ogImage[0].url); + + await req.app.locals.db.push("/courses", { + [code]: { + map: headers.map, + uploader: { + authkey: key, + userid: steamIds[key], + }, + time: Date.now(), + path: `courses/${code}.txt`, + mapid: headers.mapid === "0" || headers.mapid === "no_map_id" ? "" : headers.mapid, + mapimg: mapImage, + plays: 0, + }, + }, false); + + await log( + `[UPLOAD] User uploaded a course from the game (Course: ${code}, SteamID: ${steamIds[key]}, Key ${key}).`, + `[UPLOAD] User uploaded a course from the game (Course: \`${code}\`, SteamID: \`${steamIds[key]}\`, Key \`${key}\`).`, + ); + res.send({ res: res.statusCode, code: code }); +}); + +router.post("/upload_site", isUser, async (req, res) => { + const { headers, user } = req; + const ip = headers["cf-connecting-ip"] || "Unknown"; + + if (ip !== "Unknown" && (await req.app.locals.isRatelimited(ip))) return res.status(401).json({ res: res.statusCode, message: "Too many requests. Please try again later." }); + if (ip !== "Unknown" && (await req.app.locals.isMultiAccount(ip, user.steamid))) return res.status(401).json({ res: res.statusCode, message: "Your account was detected as multiaccount. Please open a ticket on our Discord server." }); + + const form = formidable({ maxFileSize: 10 * 1024 * 1024 }); + + form.parse(req, async (err, fields, files) => { + if (err) return res.send("Error while uploading file. Please contact the administrator."); + + const uploaded = fs.readFileSync(files.file.filepath); + + let course = ""; + try { + course = lzma.decompress(uploaded); + } catch (e) { + course = uploaded; + } + + if (!isCourseFileValid(JSON.parse(course))) return res.status(401).json({ res: res.statusCode, message: "Invalid course file. Please provide a valid course." }); + + let code = generateCode(); + let file = `public/courses/${code}.txt`; + + do { + code = generateCode(); + file = `public/courses/${code}.txt`; + } while (fs.existsSync(file)); + + fs.writeFileSync(file, course); + + const mapid = fields.link.match(/id=(\d+)/)[1]; + const mapImage = await openGraphScraper({ url: `https://steamcommunity.com/sharedfiles/filedetails/?id=${mapid}` }).then(data => data.result.ogImage[0].url); + + await req.app.locals.db.push("/courses", { + [code]: { + map: fields.map, + uploader: { + authkey: user.authKey, + userid: user.steamid, + }, + time: Date.now(), + path: `courses/${code}.txt`, + mapid: mapid, + mapimg: mapImage, + plays: 0, + }, + }, false); + + await log( + `[UPLOAD] User uploaded a course from the site (Course: ${code}, SteamID: ${user.steamid}, Key ${user.authKey}).`, + `[UPLOAD] User uploaded a course from the site (Course: \`${code}\`, SteamID: \`${user.steamid}\`, Key \`${user.authKey}\`).`, + ); + res.send({ res: res.statusCode, code: code }); + }); +}); + +router.post("/update", isUserGame, async (req, res) => { + const { headers } = req; + if (!headers.course) return res.status(401).json({ res: res.statusCode, message: "No course provided. Please provide a valid course." }); + if (!headers.map) return res.status(401).json({ res: res.statusCode, message: "No map provided. Please provide a valid map." }); + if (!headers.code) return res.status(401).json({ res: res.statusCode, message: "No code provided. Please provide a valid course code." }); + + const ip = headers["cf-connecting-ip"] || "Unknown"; + const key = headers.authorization; + const keys = await req.app.locals.db.getData("/keys"); + const steamIds = Object.fromEntries(Object.entries(keys).map(([k, v]) => [v, k])); + const steamid = steamIds[key]; + + if (ip !== "Unknown" && (await req.app.locals.isRatelimited(ip))) return res.status(401).json({ message: "Too many requests. Please try again later." }); + if (ip !== "Unknown" && (await req.app.locals.isMultiAccount(ip, steamid))) return res.status(401).json({ message: "Your account was detected as multiaccount. Please open a ticket on our Discord server." }); + + const courseData = await req.app.locals.db.getData(`/courses/${headers.code.toUpperCase()}`); + + if (courseData.map !== headers.map) return res.status(401).json({ res: res.statusCode, message: "Invalid map. You should provide the same map as before." }); + if (courseData.uploader.userid !== steamIds[key]) return res.status(401).json({ res: res.statusCode, message: "Invalid key. You are not the uploader of this course. Only the uploader can update their course." }); + + let course = ""; + try { + course = lzma.decompress(Buffer.from(headers.course, "base64")); + } catch (e) { + course = Buffer.from(headers.course, "base64").toString("utf-8"); + } + + if (!isCourseFileValid(JSON.parse(course))) return res.status(401).json({ res: res.statusCode, message: "Invalid course file. Please provide a valid course." }); + + fs.writeFileSync(`public/courses/${headers.code.toUpperCase()}.txt`, course, "utf-8"); + + courseData.time = Date.now(); + + await req.app.locals.db.push(`/courses/${headers.code.toUpperCase()}`, courseData); + + await log( + `[UPDATE] User updated a course (Course: ${headers.code.toUpperCase()}, SteamID: ${steamIds[key]}, Key ${key}).`, + `[UPDATE] User updated a course (Course: \`${headers.code.toUpperCase()}\`, SteamID: \`${steamIds[key]}\`, Key \`${key}\`).`, + ); + res.send({ res: res.statusCode, code: headers.code.toUpperCase() }); +}); + +router.post("/rate", isUser, async (req, res) => { + const { action, code, steamid } = req.body; + + if (action === "like") { + const ratings = await req.app.locals.db.getData("/rating"); + + ratings[code][steamid] = true; + + await req.app.locals.db.push("/rating", ratings); + + res.send({ success: true, code: code, likes: Object.values(ratings[code]).filter(x => x === true).length }); + } else if (action === "dislike") { + const ratings = await req.app.locals.db.getData("/rating"); + + ratings[code][steamid] = false; + + await req.app.locals.db.push("/rating", ratings); + + res.send({ success: true, code: code, dislikes: Object.values(ratings[code]).filter(x => x === false).length }); + } else return res.status(401).json({ res: res.statusCode, message: "Invalid action provided." }); +}); + +router.post("/admin", isAdmin, async (req, res) => { + const { user } = req, + { action, target } = req.body.args; + + if (action === "addKey") { + if (!target) return res.send({ success: false, message: "Target not provided. Please provide a target." }); + + const key = await req.app.locals.getKey(target); + + if (!key) return res.send({ success: false, message: "Internal error. Contact the developer." }); + + await log( + `[ADMIN] Added new user (Admin: ${user.steamid}, SteamID: ${target}, Key ${key}).`, + `[ADMIN] Added new user (Admin: \`${user.steamid}\`, SteamID: \`${target}\`, Key \`${key}\`).`, + ); + + res.send({ success: true, message: `Key added successfully.\n${key}` }); + } else if (action === "removeKey") { + if (!target) return res.send({ success: false, message: "Target not provided. Please provide a target." }); + + const keys = await req.app.locals.db.getData("/keys"); + + if (!keys[target]) return res.send({ success: false, message: "Invalid SteamID provided." }); + + delete keys[target]; + + await req.app.locals.db.push("/keys", keys); + + await log( + `[ADMIN] Removed a user (Admin: ${user.steamid}, SteamID: ${target}).`, + `[ADMIN] Removed a user (Admin: \`${user.steamid}\`, SteamID: \`${target}\`).`, + ); + + res.send({ success: true, message: `Key removed successfully.\n${target.toUpperCase()}` }); + } else if (action === "lockUser") { + if (!target) return res.send({ success: false, message: "Target not provided. Please provide a target." }); + + const locked = await req.app.locals.db.getData("/locked"); + + if (locked[target]) return res.send({ success: false, message: "User is already locked." }); + + locked[target] = true; + + await req.app.locals.db.push("/locked", locked); + + await log( + `[ADMIN] Locked a user (Admin: ${user.steamid}, SteamID: ${target}).`, + `[ADMIN] Locked a user (Admin: \`${user.steamid}\`, SteamID: \`${target}\`).`, + ); + + res.send({ success: true, message: `User is now locked.\n${target}` }); + } else if (action === "unlockUser") { + if (!target) return res.send({ success: false, message: "Target not provided. Please provide a target." }); + + const locked = await req.app.locals.db.getData("/locked"); + + if (!locked[target]) return res.send({ success: false, message: "User is not locked." }); + + delete locked[target]; + + await req.app.locals.db.push("/locked", locked); + + await log( + `[ADMIN] Unlocked a user (Admin: ${user.steamid}, SteamID: ${target}).`, + `[ADMIN] Unlocked a user (Admin: \`${user.steamid}\`, SteamID: \`${target}\`).`, + ); + + res.send({ success: true, message: `User is now unlocked.\n${target}` }); + } else if (action === "removeCourse") { + if (!target) return res.send({ success: false, message: "Target not provided. Please provide a target." }); + + const courses = await req.app.locals.db.getData("/courses"); + + if (!courses[target.toUpperCase()]) return res.send({ success: false, message: "Invalid course code provided." }); + + delete courses[target.toUpperCase()]; + fs.unlinkSync(`public/courses/${target.toUpperCase()}.txt`); + + await req.app.locals.db.push("/courses", courses); + + await log( + `[ADMIN] Remove a course (Admin: ${user.steamid}, Course: ${target.toUpperCase()}).`, + `[ADMIN] Remove a course (Admin: \`${user.steamid}\`, Course: \`${target.toUpperCase()}\`).`, + ); + + res.send({ success: true, message: `Course removed successfully.\n${target.toUpperCase()}` }); + } else if (action === "showLogs") { + const file = fs.readFileSync("data/logs.log", "utf-8"); + + if (!file) return res.send({ success: false, message: "No logs found." }); + + res.send({ success: true, message: file }); + } else if (action === "showRecords") { + const records = await req.app.locals.db.getData("/records"); + + res.send({ success: true, message: JSON.stringify(records) }); + } else if (action === "showLocks") { + const locked = await req.app.locals.db.getData("/locked"); + + const message = Object.keys(locked).length === 0 + ? JSON.stringify(locked) + : Object.keys(locked).map(x => `${x} - ${locked[x]}`).join("\n"); + + res.send({ success: true, message: message }); + } else return res.send({ success: false, message: "Invalid action provided." }); +}); + +router.get("/admin", isAdmin, async (req, res) => { + res.send("Hello get"); +}); + +router.get("/info", async (req, res) => { + const courses = await req.app.locals.db.getData("/courses"); + const usernames = await req.app.locals.db.getData("/usernames"); + + // eslint-disable-next-line no-unused-vars + for (const [code, data] of Object.entries(courses)) { + delete data.uploader.authkey; + data.uploader.name = usernames[data.uploader.userid]; + } + + res.send({ res: res.statusCode, data: courses }); +}); + +router.get("/info/:code", async (req, res) => { + let course; + + try { + course = await req.app.locals.db.getData(`/courses/${req.params.code.toUpperCase()}`); + } catch (e) { + return res.status(401).json({ res: res.statusCode, message: "Invalid course code provided." }); + } + + const usernames = await req.app.locals.db.getData("/usernames"); + + delete course.uploader.authkey; + course.uploader.name = usernames[course.uploader.userid]; + + res.send({ res: res.statusCode, data: course }); +}); + +module.exports = router; diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..d35d695 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,237 @@ +const express = require("express"), + router = express.Router(), + fs = require("fs"), + courseCardComponent = fs.readFileSync("components/course_card.html", "utf-8"); + +const { sanitize, isCourseFileValid } = require("../utils/functions"); + +router.get("/", async (req, res) => { + const courses = await req.app.locals.db.getData("/courses"); + const codes = Object.keys(courses); + + let sortType = "none"; + if (req.query.sort) sortType = req.query.sort.toString(); + + let page = 1; + if (req.query.page) page = req.query.page.toString(); + + let search = ""; + if (req.query.search) search = req.query.search.toString(); + + /* Pages Count */ + const coursesCount = Object.keys(courses).length; + const pagesCount = Math.max(Math.ceil(coursesCount / 20), 0); + + if (page === "Page") page = 1; + if (page * 20 - coursesCount >= 20) page = 1; + + let pagesDropdown = ""; + + for (let i = 1; i <= pagesCount; i++) { + if (page === i.toString()) pagesDropdown += ``; + else pagesDropdown += ``; + } + + /* Sort Dropdown */ + const sortOptions = { + time: "Date", + name: "Course Name", + map: "Map Name", + elements: "Element count", + scoresmart: "Rating (Smart)", + scoredumb: "Rating (Dumb)", + plays: "Plays", + }; + let sortDropdown = ""; + + for (const [key, value] of Object.entries(sortOptions)) { + if (sortType === key) sortDropdown += ``; + else sortDropdown += ``; + } + + /* Courses Cards */ + const usernames = await req.app.locals.db.getData("/usernames"); + const ratings = await req.app.locals.db.getData("/rating"); + const codesData = []; + const cards = []; + + codes.forEach(async code => { + const codeData = courses[code]; + + let codeFile = ""; + try { + codeFile = fs.readFileSync(`public/${codeData.path}`, "utf-8"); + } catch (e) { + return console.log(`[WARINGN] Not found file for: ${code}`); + } + + const parsedCodeFile = JSON.parse(codeFile); + + if (!isCourseFileValid(parsedCodeFile)) console.log(`[WARNING] Course is not valid: ${code}`); + + let codeMapImage = "img/unknown.jpg"; + + const codeMap = codeData.map; + if (codeMap === "gm_flatgrass" || codeMap === "gm_construct") if (fs.existsSync(`public/img/${codeMap}.jpg`)) codeMapImage = `img/${codeMap}.jpg`; + + if (codeData.mapimg) codeMapImage = codeData.mapimg; + + const codeMapId = codeData.mapid !== "0" && codeData.mapid !== "" ? codeData.mapid : "2818480138"; // le troll + const codeUserId = codeData.uploader.userid; + const codeUsername = usernames[codeUserId] ? usernames[codeUserId] : codeUserId; + + if (!ratings[code]) { + ratings[code] = {}; + } + + const rating = getCourseRating(ratings[code]); + + codesData.push({ + name: parsedCodeFile[4], + code: code, + map: codeData.map, + username: codeUsername, + userid: codeUserId, + elements: parsedCodeFile[5].length + parsedCodeFile[0].length, + download: codeData.path, + likes: rating.likes, + dislikes: rating.dislikes, + rates: rating.ratings, + scoresmart: rating.rateSmart, + scoredumb: rating.rateDumb, + mapimg: codeMapImage, + mapwid: codeMapId, + time: codeData.time, + plays: codeData.plays || 0, + }); + }); + + let sortedCodesData = []; + + const sortKeys = { + time: "DESC", + name: "STRING", + map: "STRING", + elements: "DESC", + scoresmart: "DESC", + scoredumb: "DESC", + plays: "DESC", + }; + + if (sortType === "none" || sortType === "Sort") + sortedCodesData = codesData.sort((a, b) => { + return b.time - a.time; + }); + else { + const sortKey = sortKeys[sortType]; + + if (sortKey === "STRING") + sortedCodesData = codesData.sort((a, b) => { + return a[sortType].localeCompare(b[sortType]); + }); + else if (sortKey === "ASC") + sortedCodesData = codesData.sort((a, b) => { + return a[sortType] - b[sortType]; + }); + else if (sortKey === "DESC") + sortedCodesData = codesData.sort((a, b) => { + return b[sortType] - a[sortType]; + }); + } + + if (search) + sortedCodesData = codesData.filter(c => { + const query = sanitize(search, true, false); + + let searchString = ""; + searchString += c.name; + searchString += c.code; + searchString += c.userid; + searchString += c.username; + searchString += c.map; + searchString += c.mapwid; + + return searchString.toLowerCase().includes(query); + }); + + sortedCodesData.forEach(data => cards.push(generateCourseCard(data))); + + const sortedCards = cards.slice(Math.max((page - 1) * 20 - 1, 0), Math.max((page - 1) * 20 - 1, 0) + 20).join("\n"); + + res.render("index", { + user: req.user, + locals: req.app.locals, + pagesDropdown: pagesDropdown, + sortDropdown: sortDropdown, + coursesList: sortedCards, + searchText: search, + sanitize, + }); + + await req.app.locals.db.push("/rating", ratings); +}); + +/** + * Calculates rating statistics for a course based on rating data. + * + * @param {Object} data - Object containing rating data where keys are user IDs + * and values are true for like or false for dislike + * @returns {Object} Object containing calculated rating stats: + * - likes: Number of likes + * - dislikes: Number of dislikes + * - ratings: Total number of ratings + * - rateSmart: Likes minus dislikes + * - rateDumb: Likes divided by total ratings + */ +function getCourseRating(data) { + const ratings = Object.keys(data).length; + + if (ratings <= 0) return { likes: 0, dislikes: 0, ratings: 0, rateSmart: 0, rateDumb: 0 }; + + let likes = 0, + dislikes = 0, + rateSmart = 0, + rateDumb = 0; + + for (const r in data) if (data[r]) likes += 1; + + dislikes = ratings - likes; + rateSmart = ratings + likes - dislikes; + rateDumb = likes / ratings; + + return { likes: likes, dislikes: dislikes, ratings: ratings, rateSmart: rateSmart, rateDumb: rateDumb }; +} + +/** + * Generates an HTML string for a course card component. + * + * @param {Object} course The course data object + * @returns {String} The generated HTML string for the course card + */ +function generateCourseCard(course) { + const templates = { + "{courseName}": course.name, + "{courseCode}": course.code, + "{uploaderID}": course.userid, + "{uploaderName}": course.username, + "{courseMap}": course.map, + "{downloadLink}": course.download, + "{likesCount}": course.likes, + "{dislikesCount}": course.dislikes, + "{ratesmart}": course.scoresmart, + "{ratedumb}": course.scoredumb, + "{mapImage}": course.mapimg, + "{mapID}": course.mapwid, + "{elementsCount}": course.elements === 1 ? "1 element" : `${course.elements} elements`, + "{uploadDate}": new Date(course.time).toLocaleString("ru-RU", { day: "2-digit", month: "2-digit", year: "2-digit" }), + "{plays}": course.plays === 1 ? "1 play" : `${course.plays || 0} plays`, + }; + + let output = courseCardComponent; + + for (const t in templates) output = output.replace(new RegExp(t, "g"), templates[t]); + + return output; +} + +module.exports = router; diff --git a/routes/key.js b/routes/key.js new file mode 100644 index 0000000..1aa716b --- /dev/null +++ b/routes/key.js @@ -0,0 +1,52 @@ +const express = require("express"), + router = express.Router(), + fetch = require("node-fetch"); + +const { sanitize } = require("../utils/functions"); + +router.get("/", async (req, res) => { + if (req.user) req.user.authKey = await registerUser(req.app.locals, req.user); + + res.render("key", { + user: req.user, + locals: req.app.locals, + }); +}); + +/** + * Checks if the user owns a specific game on Steam. + * + * @param {object} locals The app locals object + * @param {object} user - The user object + * @returns {Promise} Promise resolving to true if user owns the game, false otherwise + */ +async function hasGame(locals, user) { + const response = (await fetch(`https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=${locals.config.steamKey}&steamid=${user.steamid}&format=json`).then(r => r.json())).response; + + if (response.games && response.games.find(g => g.appid === 4000)) return true; + return false; +} + +/** + * Registers a user by checking account age and ownership of Garry's Mod, + * generating an auth key, recording their username, and returning the auth key. + * + * @param {object} locals The app locals object + * @param {object} user The user object + * @returns {Promise} A promise that resolves to the auth key string. + */ +async function registerUser(locals, user) { + if (Math.floor((new Date() - new Date(user.timecreated * 1000)) / (1000 * 60 * 60 * 24 * 30)) < 3) return "Account too young. Needs to be at least 3 months old."; + if (!hasGame(locals, user)) return "Account doesn't have Garry's mod. Make sure your game details are public."; + + const usernames = await locals.db.getData("/usernames"); + const key = await locals.getKey(user); + const username = sanitize(user.personaname, false, true); + + usernames[user.steamid] = username || "Unknown"; + await locals.db.push("/usernames", usernames); + + return key; +} + +module.exports = router; diff --git a/routes/stats.js b/routes/stats.js new file mode 100644 index 0000000..b70124f --- /dev/null +++ b/routes/stats.js @@ -0,0 +1,33 @@ +const express = require("express"), + router = express.Router(), + fs = require("fs"); + +router.get("/:code", async (req, res) => { + let course; + + try { + course = await req.app.locals.db.getData(`/courses/${req.params.code.toUpperCase()}`); + } catch (e) { + return res.status(401).json({ res: res.statusCode, message: "Invalid course code provided." }); + } + + const usernames = await req.app.locals.db.getData("/usernames"); + const courseFile = JSON.parse(fs.readFileSync(`./public/courses/${req.params.code}.txt`)); + + delete course.uploader.authkey; + + course.uploader.name = usernames[course.uploader.userid]; + course.name = courseFile[4]; + course.objectCount = courseFile[0].length + courseFile[5].length; + course.checkpointsCount = courseFile[1].length; + course.date = new Date(course.time).toLocaleString(); + + res.render("stats", { + user: req.user, + locals: req.app.locals, + code: req.params.code, + course, + }); +}); + +module.exports = router; diff --git a/routes/upload.js b/routes/upload.js new file mode 100644 index 0000000..ddc278b --- /dev/null +++ b/routes/upload.js @@ -0,0 +1,13 @@ +const express = require("express"), + router = express.Router(); + +const { isUser } = require("../utils/functions"); + +router.get("/", isUser, async (req, res) => { + res.render("upload", { + user: req.user, + locals: req.app.locals, + }); +}); + +module.exports = router; diff --git a/tailwind-files/input.css b/tailwind-files/input.css new file mode 100644 index 0000000..e9f8e7e --- /dev/null +++ b/tailwind-files/input.css @@ -0,0 +1,20 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer utilities { + /* Hide scrollbar for Chrome, Safari and Opera */ + .no-scrollbar::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } +} + +html { + @apply overflow-x-hidden; +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..b2789b3 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,13 @@ +/** @type {import('tailwindcss').Config} */ + +module.exports = { + content: [ + "./views/*.ejs", + "./components/*.html", + ], + plugins: [require("daisyui")], + daisyui: { + themes: ["nord", "black"], + darkTheme: "black", + }, +}; diff --git a/utils/functions.js b/utils/functions.js new file mode 100644 index 0000000..a14f5c0 --- /dev/null +++ b/utils/functions.js @@ -0,0 +1,165 @@ +const fs = require("fs"), + config = require("../config"), + fetch = require("node-fetch"); + +/** + * Middleware function that checks if the current user is an admin. + * If the user is not an admin, it redirects them to the "/key" route. + * If the user is an admin, it calls the next middleware function. + * + * @param {Object} req - The Express request object. + * @param {Object} res - The Express response object. + * @param {Function} next - The next middleware function to be called. + */ +async function isAdmin(req, res, next) { + if (!req.user) return res.redirect("/key"); + + const admins = req.app.locals.admins; + const steamid = req.user.steamid; + + if (!admins[steamid]) return res.status(401).json({ res: res.statusCode, message: "Unauthorized." }); + + return next(); +} + +/** + * Middleware function that checks if the current user has a valid authentication key. + * If the user does not have a valid key, it redirects them to the "/key" route. + * If the user has a valid key, it calls the next middleware function. + * + * @param {Object} req - The Express request object. + * @param {Object} res - The Express response object. + * @param {Function} next - The next middleware function to be called. + */ +async function isUser(req, res, next) { + if (!req.user) return res.redirect("/key"); + + const keys = await req.app.locals.db.getData("/keys"); + const steamIds = Object.fromEntries(Object.entries(keys).map(([k, v]) => [v, k])); + const key = req.user.authKey; + + if (!steamIds[key]) return res.status(401).json({ res: res.statusCode, message: "Unauthorized." }); + + return next(); +} + +/** + * Middleware function that checks if the current user has a valid authentication key. + * If the user does not have a valid key, it returns a 401 Unauthorized response with a message. + * If the user has a valid key, it calls the next middleware function. + * + * @param {Object} req - The Express request object. + * @param {Object} res - The Express response object. + * @param {Function} next - The next middleware function to be called. + */ +async function isUserGame(req, res, next) { + // if (req.get("user-agent") !== "Valve/Steam HTTP Client 1.0 GMod/13") return res.status(401).json({ res: res.statusCode, message: "Not in-game" }); + + const keys = await req.app.locals.db.getData("/keys"); + const steamIds = Object.fromEntries(Object.entries(keys).map(([k, v]) => [v, k])); + const key = req.headers.authorization; + + if (!key) return res.status(401).json({ res: res.statusCode, message: "Unauthorized. Please provide a key." }); + if (!steamIds[key]) return res.status(401).json({ res: res.statusCode, message: `Unauthorized. Get yourself a key on ${req.app.locals.config.domain}/key` }); + + return next(); +} + +/** + * Generates a random string of the given length. + * + * @param {number} [length=32] - The length of the random string to generate. + * @returns {string} The generated random string. + */ +function generateRandomString(length = 32) { + const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const charactersLength = characters.length; + let counter = 0; + let result = ""; + + while (counter < length) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + counter += 1; + } + + return result; +} + +/** + * Generates a unique random code string composed of 3 parts each consisting of 4 alphanumeric characters. The parts are separated by hyphens ("-"). + * + * @returns {string} A unique random code string in the format "AAAA-BBBB-CCCC". Each part is exactly four alphanumeric characters long. + */ +function generateCode() { + let code = ""; + + for (let i = 0; i < 3; i++) { + code += generateRandomString(4); + + if (i === 0 || i === 1) code += "-"; + } + + return code.toUpperCase(); +} + +/** + * Sanitizes a string by removing unwanted characters and replacing spaces with hyphens. + * + * @param {string} [string=""] - The string to sanitize. + * @param {boolean} [forceLowercase=true] - Whether to force the string to lowercase. + * @param {boolean} [strict=false] - Whether to remove all non-alphanumeric characters. + * @returns {string} The sanitized string. + */ +function sanitize(string = "", forceLowercase = true, strict = false) { + string = string.toString(); + + const strip = ["~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "=", "+", "[", "{", "]", "}", "\\", "|", ";", ":", "\"", "'", "‘", "’", "“", "”", "–", "—", "—", "–", ",", "<", ".", ">", "/", "?"]; + + let clean = string.trim().replace(strip, "").replace(/\s+/g, "-"); + clean = strict ? string.replace(/[^\u0400-\u04FF\w\d\s-]/g, "") : clean; + + return forceLowercase ? clean.toLowerCase() : clean; +} + +/** + * Validates that a course file content array is valid. + * + * @param {any[]} content - The course file content array to validate + * @returns {Boolean} True if the content is a valid course file array + */ +function isCourseFileValid(content) { + if (content.length !== 6) return false; + if (typeof content[0] !== "object" || typeof content[1] !== "object" || typeof content[2] !== "string" || typeof content[3] !== "number" || typeof content[4] !== "string" || typeof content[5] !== "object") return false; + + return true; +} + + +/** + * Logs a message to a log file and optionally sends it to a Discord webhook. + * + * @param {string} logs_message - The message to be logged. + * @param {string} discord_message - The message to be sent to the Discord webhook (optional). + * @returns {Promise} - A promise that resolves to `true` if the logging was successful, or `false` otherwise. + */ +async function log(logs_message, discord_message) { + fs.writeFile("data/logs.log", `[${new Date(Date.now()).toLocaleString("ru-RU")}] - ${logs_message}\n`, { flag: "a" }, async err => { + if (err) throw err; + + if (discord_message && config.webhook_url) + await fetch(config.webhook_url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + username: "Courses Logger", + content: discord_message ?? logs_message, + }), + }); + + return true; + }); +} + +module.exports = { isAdmin, isUser, isUserGame, generateRandomString, generateCode, sanitize, isCourseFileValid, log }; diff --git a/views/admin.ejs b/views/admin.ejs new file mode 100644 index 0000000..91516ed --- /dev/null +++ b/views/admin.ejs @@ -0,0 +1,108 @@ + + + + + + + + beatrun.ru | Admin + + + + + + + + + + + <% include ../components/navbar.html %> + +

+ + <% include ../components/footer.html %> + + + \ No newline at end of file diff --git a/views/error.ejs b/views/error.ejs new file mode 100644 index 0000000..7cf94ed --- /dev/null +++ b/views/error.ejs @@ -0,0 +1,3 @@ +

<%= message %>

+

<%= error.status %>

+
<%= error.stack %>
diff --git a/views/index.ejs b/views/index.ejs new file mode 100644 index 0000000..cce527b --- /dev/null +++ b/views/index.ejs @@ -0,0 +1,124 @@ + + + + + + + + + beatrun.ru | Courses + + + + + + + + + + + <% include ../components/navbar.html %> + +
+
+
+
Courses
+ + <% if (!user) { %> +
+ Authorize with Steam to load and upload these courses in-game! +
+ <% } %> + +
+
+
+
+ +
+
+ + +
+ Clear +
+
+
+ +
+ <%- coursesList %> +
+
+
+
+ + <% include ../components/footer.html %> + + + \ No newline at end of file diff --git a/views/key.ejs b/views/key.ejs new file mode 100644 index 0000000..f01ff41 --- /dev/null +++ b/views/key.ejs @@ -0,0 +1,104 @@ + + + + + + + + + beatrun.ru | Auth + + + + + + + + + <% include ../components/navbar.html %> + +
+
+
+
Authentication
+
Create your own API key here!
+ + <% if (!user) { %> + + + + <% } else { %> +
+ Great! Welcome to our little community. +
+ To get started, make sure you're using this version of Beatrun! +

+
+ Your authkey is: + +
+
+ Use this command below in console to save your API key in-game: +
+ +
+ And you're done! +

+ You can now load any course you want, as seen on the main page! +
+ Beatrun_LoadCode ABCD-1234-XYZX +

+ Have fun! +
+ + + <% } %> +
+
+
+ + <% include ../components/footer.html %> + + + diff --git a/views/stats.ejs b/views/stats.ejs new file mode 100644 index 0000000..699833f --- /dev/null +++ b/views/stats.ejs @@ -0,0 +1,77 @@ + + + + + + + + + beatrun.ru | Course - <%= course.name %> + + + + + + + + + <% include ../components/navbar.html %> + <%- console.log(course) %> +
+
+
+
<%= course.name %>
+
<%= code %>
+ +
+
+
Upload Date
+
<%= course.date.split(", ")[0] %>
<%= course.date.split(", ")[1] %>
+
+ +
+
Elements Count
+
<%= course.objectCount %>
+
+ +
+
Checkpoints Count
+
<%= course.checkpointsCount %>
+
+ +
+
Times played
+
<%= course.plays %>
+
Doesn't count direct downloads
+
+ +
+
Uploaded by
+ +
+ +
+
Map
+ +
+
+
+
+
+ + <% include ../components/footer.html %> + + + \ No newline at end of file diff --git a/views/upload.ejs b/views/upload.ejs new file mode 100644 index 0000000..05261fc --- /dev/null +++ b/views/upload.ejs @@ -0,0 +1,53 @@ + + + + + + + + + beatrun.ru | Uploading + + + + + + + + + <% include ../components/navbar.html %> + +
+
+
+
Uploading
+
Here you can upload your course!
+ +
+
+ + + + +
+
+
+
+
+ + <% include ../components/footer.html %> + + + \ No newline at end of file