diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..665b496 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +.env +node_modules +dist +logs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e7559cc..0000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -# web javascript causes a lot of eslint warnings -assets/js diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 8d56f4f..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "env": { - "browser": true, - "node": true, - "commonjs": true, - "es6": true - }, - "globals": { - "document": true - }, - "parserOptions": { - "ecmaVersion": 2021 - }, - "extends": "eslint:recommended", - "rules": { - "no-case-declarations": "off", - "no-empty": "off", - "no-console": "off", - "linebreak-style": "off", - "prefer-const": "error", - "no-var": "error", - "one-var": [ - "error", - "never" - ], - "indent": [ - "error", - "tab", - { - "SwitchCase": 1 - } - ], - "quotes": [ - "error", - "single" - ], - "semi": [ - "error", - "always" - ] - } -} diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..d3d40b6 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,56 @@ +name: Build and Publish Docker Image + +on: + push: + pull_request: + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-publish: + env: + SHOULD_PUSH_IMAGE: ${{ (github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev')) || github.event_name == 'workflow_dispatch' }} + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + steps: + - name: Set up QEMU for Docker + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log into the container registry + if: ${{ env.SHOULD_PUSH_IMAGE == 'true' }} + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/master' }} + type=raw,value=edge,enable=${{ github.ref == 'refs/heads/dev' }} + type=sha + + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@v6 + with: + platforms: linux/amd64,linux/arm64 + push: ${{ env.SHOULD_PUSH_IMAGE }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..085af2b --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,23 @@ +name: Lint + +on: + pull_request: {} + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..98cc289 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +# syntax=docker/dockerfile:1 + +ARG app_dir="/home/node/app" + + +# * Base Node.js image +FROM node:20-alpine AS base +ARG app_dir +WORKDIR ${app_dir} + + +# * Installing production dependencies +FROM base AS dependencies + +RUN --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=package-lock.json,target=package-lock.json \ + --mount=type=cache,target=/root/.npm \ + npm ci --omit=dev + + +# * Installing development dependencies and building the application +FROM base AS build + +RUN --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=package-lock.json,target=package-lock.json \ + --mount=type=cache,target=/root/.npm \ + npm ci + +COPY . . + +RUN npm run build + + +# * Running the final application +FROM base AS final +ARG app_dir + +RUN mkdir -p ${app_dir}/logs && chown node:node ${app_dir}/logs + +ENV NODE_ENV=production +USER node + +COPY package.json . + +COPY --from=dependencies ${app_dir}/node_modules ${app_dir}/node_modules +COPY --from=build ${app_dir} ${app_dir} + +CMD ["node", "."] diff --git a/blogposts/10-30-22.md b/blogposts/10-30-22.md index c4d7bce..215f930 100644 --- a/blogposts/10-30-22.md +++ b/blogposts/10-30-22.md @@ -4,7 +4,7 @@ author: "SuperMarioDaBom" author_image: "https://www.github.com/SuperMarioDaBom.png" date: "October 30, 2022" caption: "Our latest progress, alongside new info!" -cover_image: "/assets/images/blogposts/10-30-22.jpg" +cover_image: "/assets/images/blogposts/10-30-22.webp" --- ### If you want to see more frequent updates, consider supporting us by [**upgrading your account with a subscription!**](https://pretendo.network/account/upgrade) @@ -14,6 +14,7 @@ Where do I even start? This past year has been a very busy one. From Juxtaposition updates to general stability improvements to reviving a Wii U title that's been dead for 5 years now, there's something for everyone to enjoy. A lot has happened, so we won't be able to cover everything in detail. We've still got a lot of ground to cover, so let's jump into it right away! # Posts Galore + > **DUE TO SOME TECHNICAL ISSUES JUXT IS CURRENTLY NOT AVAILABLE FOR THE PUBLIC BETA. THANK YOU FOR UNDERSTANDING.** Let's start with Juxtaposition (or Juxt for short). If you're not aware, Juxt is Pretendo's reimplementation of Miiverse functionality. For more details on it's history, as well as what it all encompasses, please check out [**this blog post from 2021!**](https://pretendo.network/blog/9-29-21) @@ -21,50 +22,65 @@ Let's start with Juxtaposition (or Juxt for short). If you're not aware, Juxt is What's changed since then? ## Messages Have Arrived + You can now send messages to users that you are mutual followers with! Just like Nintendo's implementation, these messages are not secured, so do not treat it like a private conversation platform. ## When Away From Console + Juxt now has a web version! It is still somewhat limited, and you must first use Juxt on-console to get everything set up, but it's there and will be a great way to interact with users even while not using your game console. ## Wara Wara What Now? + ![An active Wara Wara Plaza, with a bunch of Miis walking around](https://media.discordapp.net/attachments/882044583238832238/1035956941052194877/unknown.png?width=2200&height=1239) Wara Wara Plaza is back to its former glory! For those who don't know, Wara Wara Plaza is the plaza of Miis you see on one of the Home Menu screens. Previously, the above could only be seen through manually adding the data to the console. If you have access to Juxt, you should be able to see the plaza back to bustling. ## That's Not All + Plenty more has changed with Juxt, too much to go into detail here. For now, let's move on to the next big addition! # Who's The BOSS Now? + SpotPass (known internally as BOSS) is a service that allows servers to push new content to consoles without requiring an update. We've demonstrated the ability to push custom Splatfests to Splatoon, but since then we've got a fully functional server to push out content! Do I sense a Splatfest in development? # Pikachu, I Choose You + Servers for 3DS Pokémon titles are nearly functional! These games require additional effort to get working correctly (including signature patches), so please stay tuned for that. # A Wild Raccoon Has Appeared! + ![Bandwidth Raccoon holding a Wii U Gamepad and a brick](https://pretendo.network/assets/images/bandwidth.svg) In case you haven't yet met him, this is Bandwidth the Raccoon! He's appeared to welcome everyone alongside some major website updates! ## Progress, Progress, Progress + The Progress page has received an upgrade! Data is now pulled from GitHub repositories, and you can see a better breakdown of the progress for each server in development! ## Have You Checked The Docs? + A Docs section has been added to the website! Here, you can find information on how to get started, as well as error codes in the event you encounter any issues. This section is still a work-in-progress, so it will be updated and added onto as time goes on. ## Goodbye Patreon, Hello Stripe + We are moving away from Patreon due to security concerns, and better integration with our services. Tiers will stay exactly the same - no changes in cost. If you wish to support the project, log into your PNID on the website and check out the info on upgrading. Pretendo is an open source project, therefore payment is not required to use the project when open publicly or self-hosted. See the info of the different tiers for a list of perks. ## It's All About Mii + One of the biggest additions to the website is you now have the ability to create & edit your account Mii! This is great for emulator users who aren't necessarily able to use a Mii Maker app to create their Miis, or for those who wish to create their PNID entirely on the web. ## Accounts, Just The Way You Like It + You can now create your PNID entirely on the web, no console required. Most settings cannot be changed just yet, though you can change your Mii. # Further Improvements To Overall System Stability And Other Minor Adjustments Have Been Made To Enhance The User Experience + Multiple servers got improvements, including the Account server and the Friends servers. The Account server now has proper access levels, which allows specific users to have access to specific services. Friends servers have increased stability, and on the Wii U side are only missing a few pieces to become fully functional. # Official Cemu Support Has Arrived! + In the latest version of the Cemu 2.0 experimental builds, support for Pretendo has been added! Check out our [Cemu usage guide](https://pretendo.network/docs/install/cemu) for more info and to get started. # Finally, After 5 Years... It Lives! + If you haven't yet seen this video by Good Vibes Gaming, go check it out! I won't go anywhere... [yt-iframe](Xtc9DJ6LYas) @@ -72,6 +88,7 @@ If you haven't yet seen this video by Good Vibes Gaming, go check it out! I won' All done? Welcome back! Yes, you aren't dreaming - Wii U Chat is finally here! The journey leading up to this point has been an adventurous one, so grab your popcorn as we go back to the beginning. ## Where It All Started + ![](https://media.discordapp.net/attachments/413884110667251722/679178001065443358/image0.jpg) Back in February 2020, Jon shared a few photos of Wii U Chat getting into the app. Hardly anything was implemented, just enough to get to the list of friends. Since we did not have a functional Friends server at the time, this was actually performed using a Nintendo Network account. We did not seriously explore the app at that time, since there were other priorities that took precedence. It would be a bit until the app was looked at again. @@ -89,6 +106,7 @@ Fast forward to October 2021. Shutterbug2000 decided to take a stab at it, and s Attempting to answer would crash the app, which would become a common theme. Wii U Chat has less than what one would consider to be the bare minimum for error handling. He left the app at that, and moved on. ## It Was Friends All Along + Two months later, in December, shutterbug2000 was looking into notifications regarding the friends list. Certain games allowed users to join their friends in ongoing online matches right from the list, and he wanted to figure out how those worked. To do this, he injected the Friends applet into a normal application. Titles such as Smash Bros. support the feature; Mario Kart 8 may have had this as a planned feature, but seems to ignore it if attempted. ![](https://media.discordapp.net/attachments/881852117550243860/919051163431747614/20211210_202021.jpg) @@ -100,6 +118,7 @@ While he was here, Shutter decided to try and see if an incoming call could be t It was from the Friends server all along! Now that the pieces were there, all that was left was to handle call sessions via matchmaking (yes, it uses similar processes to joining game sessions) and NAT traversal (a process allowing consoles to talk directly). Unfortunately, it would be some time before much more progress could be made. ## Putting It All Together + In late August of this year Jon, Shutter & I got to work to get it put together and finally working. On September 7, the first call since 2017 was made. ![](https://media.discordapp.net/attachments/881852117550243860/1017131964429516910/IMG_9043.jpg) @@ -107,14 +126,16 @@ In late August of this year Jon, Shutter & I got to work to get it put together After 5 years of this app lying dormant, it is now possible to make calls and draw on your friends' faces! This could not have been done without all of the contributions from devs and non-devs alike, so thank you to all who contributed to this effort! ## What Remains + If you're seeing this within the current public beta, good news: Wii U Chat is open for use! There are a few caveats to keep in mind, due to the early nature of the servers: -* Wii U Chat heavily relies on Miiverse functionality for certain features such as missed calls, which haven't yet been figured out & implemented. As such, the console may freeze or lock up from time to time, especially if you cancel an outgoing call. If you experience a freezing issue, please fully power off your console and try again. -* As mentioned above, missed calls are not implemented yet. Do not expect a log of calls you didn't get to while away. -* Currently, notifications are only sent to the call recipient while in the app; as mentioned above, we know how to trigger them, but this server intercommunication is not yet implemented. -* Expect bugs. Lots of them. We will not be providing much technical support for the app at this time, due to it's early nature and the fact that we know there are issues. +- Wii U Chat heavily relies on Miiverse functionality for certain features such as missed calls, which haven't yet been figured out & implemented. As such, the console may freeze or lock up from time to time, especially if you cancel an outgoing call. If you experience a freezing issue, please fully power off your console and try again. +- As mentioned above, missed calls are not implemented yet. Do not expect a log of calls you didn't get to while away. +- Currently, notifications are only sent to the call recipient while in the app; as mentioned above, we know how to trigger them, but this server intercommunication is not yet implemented. +- Expect bugs. Lots of them. We will not be providing much technical support for the app at this time, due to it's early nature and the fact that we know there are issues. We hope you enjoy Wii U Chat! # The End, For Now + That's all we've got to share for now. There's sure to be more updates in the future, so come back again later for more. diff --git a/blogposts/11-1-24.md b/blogposts/11-1-24.md new file mode 100644 index 0000000..583494f --- /dev/null +++ b/blogposts/11-1-24.md @@ -0,0 +1,89 @@ +--- +title: "October Progress Update" +author: "Jon" +author_image: "https://www.github.com/jonbarrow.png" +date: "November 1, 2024" +caption: "Archiverse, new team members, new server architecture and more!" +cover_image: "/assets/images/blogposts/11-1-24.webp" +--- + +Welcome back to another progress report. While it may seem like not a lot has been going on lately, we've been hard at work in private working on some exciting new updates to share! This blog post will serve as both an announcement for some upcoming features/additions, as well as a sneak-peak behind the scenes to see what sort of experiments we've been running! + +# Archiverse + +As many of you know, the original Miiverse service shut down late 2017. However before the service went dark for good, a team of dedicated archivists known as [Archive Team](https://wiki.archiveteam.org) managed to archive 17TB worth of posts, drawings, and images. This data was then published onto the [Internet Archive](https://archive.org). + +A group known as Archiverse was later established in 2018, providing the archived data both for modern audiences who may not have experienced Miiverse in its prime, and those feeling nostalgic who want to see themselves and what they were doing all those years ago, formally accessible at [archiverse.guide](https://archiverse.guide). In early 2024 the original maintainer left the project, leaving it in the hands of a new team now accessible at [archiverse.app](https://archiverse.app). + +We are happy to announce that we have come together with the new maintainers of Archiverse to merge our services! Archiverse is now an official Pretendo Network service, with the intent to have full (read-only) integrations within the on-console Miiverse apps and in games. This migration will take some time to complete, as we work towards moving many terabytes of data to our systems and finalizing the modifications needed to integrate everything, so stay tuned for a future blog post announcing the migration's completion! + +Archiverse can now be visited at [archiverse.pretendo.network](https://archiverse.pretendo.network)! + +**_Note: Archiverse data will be read-only, and will not be able to be modified by any account system, PNID or otherwise. Functions like "Yeahs", comments, etc. will be disabled when using Archiverse. The data used by Archiverse was taken from the browser version of Miiverse, meaning it lacks some critical in-game data needed for some games which may be impossible to recover, as it was only accessible via the Miiverse in-game API. Archiverse support in games will vary on a game-by-game basis depending on what data can and cannot be recovered/reconstructed._** + +# New Members + +With the aforementioned project merge with Archiverse, we'd like to welcome our two newest team members joining us along for the ride! Please welcome [SuperFX](https://kylewade.dev) and [Luna](https://github.com/masopuppy), the lead maintainer and designer of Archiverse respectively. Originally only helping out with the migration, we've now offered them official spots on our development team. Both are incredibly talented web developers/designers, so expect to see some exciting new features and improvements rolling out in the future. + +# New Licensing + +We encourage others to use our work in other 3rd party projects, such as [GoCentral](https://rb3e.rbenhanced.rocks/), custom "Rock Central" servers for Rock Band 3 on the Wii, PlayStation 3, and Xbox 360. To maintain openness, we typically license our work in ways that prevent privatization. Most of our work has been licensed under [AGPLv3](https://choosealicense.com/licenses/agpl-3.0), as it ensures "network use" (running software on a server) is treated as "distribution", which aligns with our focus on server-based projects. + +However, AGPLv3's strict requirements can be too restrictive, as it forces works which use the AGPLv3 licensed work (even as a library, or a non-derivative work) to also adopt AGPLv3 in its entirety, limiting compatibility with other, more permissive, licenses such as [Apache 2.0](https://choosealicense.com/licenses/apache-2.0). While this infectious nature has benefits, we recognize the need for more flexibility in certain cases. Thus, we will be reviewing some repositories when appropriate to see if less restrictive licenses could work better for specific projects. + +One project, our [`error-codes`](https://github.com/PretendoNetwork/error-codes) library for Wii U/3DS, [has already been re-licensed](https://github.com/PretendoNetwork/error-codes/pull/15) under [LGPLv3](https://choosealicense.com/licenses/lgpl-3.0), which offers similar protections to AGPLv3 but is less restrictive and avoids the full infection of AGPLv3. We will still use AGPLv3 for most projects however as other licenses lack the "network use is distribution" clause which makes it unsuitable for purely server-side software. + +# Enhanced Multiplayer with Relays + +We have begun some experiments of a new method of handling multiplayer sessions known as "relays". The networking library Nintendo used for Nintendo Network has support for relays, however they go unused officially and many games have the relay functionality stripped out to varying degrees. We have begun our own attempt at manually recreating the concept in order to boost security and stability in the future. + +**_Note: Relays are highly experimental, and not widely tested. We have seen promising results during some initial private tests, however these tests were tiny in scale and nothing suggests these are ready for any sort of public use. The experiment MAY be scrapped if found to be inviable in the future. Relays are not deployed on any game server, beta or otherwise, at this time._** + +Some background: All games on Nintendo Network which feature multiplayer are P2P ([peer-to-peer](https://en.wikipedia.org/wiki/Peer-to-peer)). Nintendo uses very little in terms of dedicated servers, opting to only use dedicated servers for features such as object storage and leaderboards. This means that rather than your console talking to a server the entire time, your console instead talks directly to other consoles in a [mesh](https://en.wikipedia.org/wiki/Mesh_networking). Our servers act as the middlemen, managing individual client connections and grouping them together in what's known as a "gathering", also called a "session". Once a gathering is created on the server, users may join it. The server then tells all the relevant clients in the session who each of the other players are (either directly on join or through live notifications after already joining), and then your consoles begin talking to each other after establishing connections following [NAT traversal](). + +This architecture has several pros, including: + +1. Less strain on the servers +2. Potentially lower latency for clients geographically closer to each other +3. P2P networks tend to be very good at self-adjusting to account for dropped/new connections + +However it does come with some notable cons, such as: + +1. Connection issues due to incompatible networks, resulting in failed NAT traversal (very common cause of `118-XXXX` errors) +2. Potential security concerns over direct visibility of other clients IP addresses +3. Lack of server involvement makes cheating/hacking much easier +4. Potentially _higher_ latency for clients geographically _farther_ from each other or between those with slower home internet speeds + +Relays are designed to try and combat some of these cons. Rather than the matchmaking server telling each client the addresses of other players, the server would instead provide the address for a running relay server. Clients then connect to these relay servers as if they were other clients in the mesh. The server then accepts all incoming P2P packets and routes them to the other players also connected to the relay as needed. These relay servers effectively turn P2P games into client->server games. + +Routing this session traffic through our own relay servers could fix many of the cons associated with P2P networking, including: + +1. Removing the issue of incompatible networks, as now you are only talking to our server and not directly to another user +2. Effectively masking your IP address from other users, as now the only addresses being used would be ours +3. Logging of gameplay events to look for anomalies, and even logging entire sessions for later review in the style of [Hypixel Atlas "Replays"](https://support.hypixel.net/hc/en-us/articles/4411166834834-About-the-Hypixel-Replay-System-and-Atlas) to more easily track and report cheaters +4. More efficient player kicks on a per-session basis + +Early tests in Splatoon showed promising results, being able to complete several test matches while running through relays with no direct connections between users. However this system is still in it's infancy and many technical and design quirks have not been ironed out, including managing many relays at scale, increased cost estimations due to increased data usage on our servers, etc. We do not have an ETA for when this system will arrive or in what shape/form it would take. + +# New Games and Updated Matchmaking + +At the moment we are prioritizing improving our internal tooling, underlying networking libraries, game server protocol implementations, and more rather than prioritizing the total number of games we output. However we may decide to release new games if it relates to those efforts, such as games which use features which have yet to be tested, or simple games used to test large-scale changes just as reworks to common protocols. + +As of today we are releasing 2 new games into beta testing: + +- Monster Hunter 4 Ultimate +- Super Street Fighter IV + +These games had their servers created using some experimental internal tooling we are developing to help streamline to creation of simple game servers. In these cases, the backends for these servers were entirely generated automatically! These servers also serve as a test for the [large-scale matchmaking rework](https://github.com/PretendoNetwork/nex-protocols-common-go/pull/35) that [DaniElectra](https://github.com/DaniElectra) has been working on the past few months! + +These matchmaking reworks bring not only better matchmaking logic in general, but also more stable session tracking and creation. These changes give us more control over match management and can be used for more accurate player tracking/moderation, even in cases where players may try to anonymize themselves or mask their user information in local connections. + +Pending the results of the matchmaking tests, existing games may soon be getting the same matchmaking rework to try and improve the quality of matchmaking. Similarly, smaller/simple games may be released more often pending the results of our new internal tooling. + +Additionally, Minecraft: Wii U Edition has been upgraded with this matchmaking rework, fixing the bug where only 2 players can connect at a time. These changes are available to the public for more widespread testing. + +Finally, we have recently documented all the official names for `118-XXXX` error codes. Using this knowledge, we have begun to identify some potential causes for several of these errors. These are now also being looked into, in an effort to improve our matchmaking logic and reduce the number of incompatible clients being put in the same sessions. For details, see the [official feature enhancement request on GitHub](https://github.com/PretendoNetwork/nex-protocols-common-go/issues/43). + +# Conclusion + +While this month did not see much in the way of new public features, we've been hard at work on many internal affairs. We hope you enjoyed our first more "technical"/"behind the scenes" blog post, and we hope to add more updates like these to future blog posts, mixed in with actual content updates! diff --git a/blogposts/11-14-21.md b/blogposts/11-14-21.md index 0675ab5..79b0328 100644 --- a/blogposts/11-14-21.md +++ b/blogposts/11-14-21.md @@ -4,41 +4,49 @@ author: "Jon" author_image: "https://www.github.com/jonbarrow.png" date: "November 14, 2021" caption: "Progress made in the month of October" -cover_image: "/assets/images/blogposts/11-14-21.jpg" +cover_image: "/assets/images/blogposts/11-14-21.webp" --- ### If you want to see more frequent updates, consider supporting us on [**Patreon**](https://patreon.com/PretendoNetwork) # Introduction + Welcome to the October monthly recap. While not a lot of updates happened, the ones which did were important! ## RSS + Small update to the website, we now have an RSS feed for blog posts! Use your favorite reader to keep up to date on all our blog posts ## Stability + Both `nex-go` and `nex-protocols-go` recieved several stability, code quality, and feature updates. These include, but are not limited to, RMC Request creation, fixing packet fragment IDs not being used, many new types being supported in our `StreamIn` and `StreamOut` structs, and a server ping timeout to properly close connections when a client leaves. These all make the network work much better and feel much more cohesive ## Where is everyone? + The core of online multiplayer is connecting users together. On the Wii U and 3DS, multiplayer is handled via a p2p (peer-to-peer) connection, where one use is assigned as the "host" allowing other users to directly connect to their game session. The technology behind allowing users to connect to other users using arbitrary ports is called `NAT Traversal`. Until now, `NAT Traversal` was not working correctly and clients needed to open all ports to connect. Thanks to developer [shutterbug](https://github.com/shutterbug2000) `NAT` now properly works! -![Screenshot of shutterbug showing off NAT traversal using mario kart 7](/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.png) +![Screenshot of shutterbug showing off NAT traversal using mario kart 7](/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.webp) ## Rev your engines! + Both Mario Kart 7 and Mario Kart 8 have started going online and can play matches. These games are far from complete but this is a great stepping stone. Patrons can access the beta servers for Mario Kart 8 right now, Mario Kart 7 has no servers available however. [CTGP-7](https://ctgp-7.github.io/) is also confirmed working for Mario Kart 7, and [CTGP-Café](https://rambo6glaz.github.io/CTGP-Cafe/) being planned for testing as well with full integration planned for both -![Screenshot of Billy showing off CTGP-7](/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.png) +![Screenshot of Billy showing off CTGP-7](/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.webp) [yt-iframe](W974FEDIoAA) ## Hello YouTube! + An unintended side effect of working on Miiverse support in Mario Kart 8 was YouTube uploading being re-enabled! You can now upload race clips from Mario Kart 8 to YouTube again. Patrons who run the Miiverse patch can try this feature out right now [yt-iframe](d3Bq7auupV0) ## Squid Game + Splatoon multiplayer battles now works! As of now only private friend battles have been tested, but they seem to be working without issue [yt-iframe](d_qFnXrP7a4) ## Friendship is magic -The friends server received some big updates. You can now properly set your privacy settings, add friends, and receive notifications from the server on what your friends are playing \ No newline at end of file + +The friends server received some big updates. You can now properly set your privacy settings, add friends, and receive notifications from the server on what your friends are playing diff --git a/blogposts/12-23-23.md b/blogposts/12-23-23.md index 2724d3f..8506875 100644 --- a/blogposts/12-23-23.md +++ b/blogposts/12-23-23.md @@ -4,17 +4,19 @@ author: "Jon" author_image: "https://www.github.com/jonbarrow.png" date: "December 23, 2023" caption: "Information regarding Nintendo's rollout of the Nintendo Network shutdown" -cover_image: "/assets/images/blogposts/12-23-23.jpg" +cover_image: "/assets/images/blogposts/12-23-23.webp" --- ## EDIT December 27th, 2023: THIS INFORMATION IS NOW OUTDATED. SEE https://pretendo.network/blog/12-27-23. THIS POST WILL REMAIN UP ONLY FOR HISTORICAL REASONS ## Intro + First, we would like to apologize for the lack of blog posts this year. We planned to do more, but other priorities kept getting in the way. We continued to provide updates through our Discord and social medias during this time, but we plan to use this blog more often now. This blog post will be a bit more serious than previous posts, as the subject matter is rather somber. We apologize for the lack of energy and quips you may have enjoyed in previous posts. This post will have information regarding several aspects of the shutdown, some of which have been covered on other social media posts. Please use the table of contents below to jump to your desired section. ## Table of Contents + 1. [The Shutdown](#the-shutdown) 2. [Super Mario Maker](#super-mario-maker) 3. [New Accounts (Prerequisite)](#new-accounts-prerequisite) @@ -22,13 +24,15 @@ This blog post will be a bit more serious than previous posts, as the subject ma 5. [Conclusion](#conclusion) ## The Shutdown + In October of 2023, Nintendo [announced the shutdown of Nintendo Network](https://en-americas-support.nintendo.com/app/answers/detail/a_id/63227/~/announcement-of-discontinuation-of-online-services-for-nintendo-3ds-and-wii-u) for April of 2024. It was stated that a specific date and time would be announced later, and as of this post that has not happened yet. There have been no public announcements of any services shutting down early, though Nintendo stated they reserve they right to do so if: -> *"an event occurs that would make it difficult to continue online services for Nintendo 3DS and Wii U software"* +> _"an event occurs that would make it difficult to continue online services for Nintendo 3DS and Wii U software"_ However, it appears that Nintendo has begun a slow rollout of shutdowns. Intentional or not. ## Super Mario Maker + This information was also detailed in a [Twitter thread](https://twitter.com/PretendoNetwork/status/1736325668412031255). You may read this there if you wish, or read the repost below. Some time in early December 2023, Super Mario Maker began throwing error `106-0502` very often when trying to connect. It is unclear when this truly began, but the earliest occurrences we could find were around the 8th of December. Upon inspection, the cause for this error was clear: the server the game was attempting to connect to no longer existed. Our first assumption was that this was the beginning of the shutdown early, that Nintendo may have started turning off games without notice. After some more research, however, we discovered some users able to still connect. @@ -44,6 +48,7 @@ Every game on Nintendo Network uses the same 2 authentication servers. However e We believe this is due to Nintendo attempting to scale back how many servers are running for each game, to save on costs as the shutdown date approaches. They most likely made an error in their presumed load balancer to not remove these now dead servers from the pool of available addresses. We believe this was done completely unintentionally, however Nintendo shows no signs of fixing this error. ## New Accounts (Prerequisite) + As briefly touched on in [Super Mario Maker](#super-mario-maker), Nintendo actually uses a series of internal accounts for several services. For games, these are called "NEX accounts". Some background knowledge is required for this section, which will be gone over now. NEX is the software Nintendo uses for all 3DS and WiiU games (and some Switch games). It is based on a library called Rendez-Vous, made by Canadian software company [Quazal](https://web.archive.org/web/20040610104624/http://www.quazal.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=101&page=1). Quazal, before being bought out by Ubisoft, would license Rendez-Vous to anyone. Many games, on many platforms, by many developers, all use some variation of Rendez-Vous as it was highly extensible. This is why our server libraries are [theoretically compatible with Ubisoft games](https://twitter.com/PretendoNetwork/status/1727016210435641508). @@ -51,11 +56,12 @@ NEX is the software Nintendo uses for all 3DS and WiiU games (and some Switch ga Nintendo licensed Rendez-Vous and modified it quite a bit, stripping out some more complex features and adding in some custom protocols, rebranding it to NEX. The important takeaway here is that Nintendo did not build this system from scratch, and instead modified a system made for generic game server usage. ## New Accounts + Some time in late December 2023, new accounts could no longer go online in any games on both the WiiU and 3DS. As mentioned in [New Accounts (Prerequisite)](#new-accounts-prerequisite), Nintendo did not make their game server software from scratch. Rendez-Vous comes with its own account system, likely due to it being designed for use in one-off games. At the time of its development, online multiplayer games were still very new and the concept of a unified account system (such as Nintendo Network or Uplay) spanning many different games made by the same company, was not a thing. Therefore, Nintendo needed to cope with this existing account system in some way. -On the 3DS, the console registers a new NEX account on the Friends server once during the console's setup process. Each 3DS, under normal circumstances, will only ever have a single account at a time (though this is not *always* true, but not relevant). This is why a NNID is not required to play most games online on the 3DS, as games use your NEX account to login to all game servers. Because of this, a new NEX account will never be created again unless the old one is removed using CFW or by factory resetting the console. +On the 3DS, the console registers a new NEX account on the Friends server once during the console's setup process. Each 3DS, under normal circumstances, will only ever have a single account at a time (though this is not _always_ true, but not relevant). This is why a NNID is not required to play most games online on the 3DS, as games use your NEX account to login to all game servers. Because of this, a new NEX account will never be created again unless the old one is removed using CFW or by factory resetting the console. On the WiiU, a new NEX account is created automatically when the NNID is registered, and the NEX account is linked to this NNID. The console then alerts the Friends server of the new NEX account, much like 3DS. Despite using NNIDs, the WiiU also uses these NEX accounts to go online in all games. @@ -66,6 +72,7 @@ This synchronization process has been stopped. New NEX accounts are no longer be It is not clear at this time whether this was intentional or not. ## Conclusion + We ask that you do not spam Nintendo's support lines with these issues. Doing so may cause Nintendo to pull the plug entirely early. There are only 3 possible scenarios: 1. Nintendo is aware of these issues already, and spam would annoy them to the point of pulling the plug. diff --git a/blogposts/12-27-23.md b/blogposts/12-27-23.md index 07c9405..d7cf133 100644 --- a/blogposts/12-27-23.md +++ b/blogposts/12-27-23.md @@ -4,42 +4,50 @@ author: "Jon" author_image: "https://www.github.com/jonbarrow.png" date: "December 27, 2023" caption: "Updates regarding our last blog post" -cover_image: "/assets/images/blogposts/12-23-23.jpg" +cover_image: "/assets/images/blogposts/12-23-23.webp" --- -### *Edit December 27th, 2023 7:35 PM UTC: Nintendo has fixed the friends sync issue during maintenance* +### _Edit December 27th, 2023 7:35 PM UTC: Nintendo has fixed the friends sync issue during maintenance_ ## Intro + This is an update to our [last blog post](https://pretendo.network/blog/12-23-23), where we discussed some issues regarding Nintendo Network and how they could possibly be linked to the upcoming shutdown. This post aims to provide updates on the situation, as things have begun to improve. This is a developing situation. As such, this blog post may be updated at any time as new information comes in. Edits will be mentioned above this introduction. ## For the media + We deeply appreciate members of the media wanting to cover this situation, and using us as a trusted source for information. We saw a number of outlets covering our last blog post, and we think it's wonderful they are trying to spread the word. With that said, some outlets did a less than stellar job at reporting our last post, not covering some topics fully or accurately. We would like to ask that members of the media who wish to cover anything posted by us please contact us first to verify the accuracy and legitimacy of the information. We have contacts open on most major social media, and would be happy to discuss things. ## Table of Contents + 1. [Thanks](#thanks) 2. [New Account Syncing](#new-account-syncing) -2. [New Account Syncing (Friends)](#new-account-syncing-friends) -3. [Super Mario Maker (Dead Servers)](#super-mario-maker-dead-servers) -4. [Super Mario Maker (AWS)](#super-mario-maker) -5. [Conclusion](#conclusion) +3. [New Account Syncing (Friends)](#new-account-syncing-friends) +4. [Super Mario Maker (Dead Servers)](#super-mario-maker-dead-servers) +5. [Super Mario Maker (AWS)](#super-mario-maker) +6. [Conclusion](#conclusion) ## Thanks + Before we begin, I'd like to thank members of both our community and Nintendo for their parts in this situation. In our last blog post we urged users to not spam Nintendo regarding these issues, which many followed. We would like to thank those who followed that advice, as we have been given confirmation that those actions may have led Nintendo to act "in a way that's negative". We were told this by our media contact, who will remain anonymous. This contact was able to reach out to Nintendo directly, and together we were able to privately forward these issues to the correct channels. We noted in our last blog post that it was unclear whether these issues were intentional or not, and it appears that this was indeed unintentional. While we cannot confirm whether or not Nintendo will take action on all issues presented to them, we would like to thank Nintendo for taking the time to at least acknowledge the issues and look into correcting them. We would also like to specifically thank the engineers and other IT staff at Nintendo working to maintain these legacy servers despite the impending shutdown. ## New Account Syncing + In our last blog post we went into detail about how some parts of Nintendo's server architecture works, and how this led to new users on both platforms not being able to connect to game servers anymore. We are happy to announce that as of December 26th, 2023 at around 5:00 PM UTC this seems to have been corrected. We have verified this with several people internally, on both platforms and in several games. New accounts may now go online as normal. ## New Account Syncing (Friends) + Shortly after our last blog post, we discovered that new friends on the 3DS were also not being synced to other servers even for existing users. This meant that games such as Animal Crossing: New Leaf could not be played with 3DS friends made after the recent server changes, as your friends were no longer being synced. This issue has not yet been confirmed to happen on the Wii U, however due to the Wii U and 3DS sharing a Friends server it is likely this happens on both platforms. We did not publicly disclose this at the time as we were still gathering information in order to accurately report on the issue. Following maintenance on December 27th, 2023 this has been fixed. ## Super Mario Maker (Dead Servers) + Previously announced via Twitter, and briefly touched on in our last blog post, Super Mario Maker's authentication server has an error with the list of game servers it gives to the client to connect to. Most of these servers are no longer online, meaning most attempts to connect to the game will fail. As of writing on December 27th, 2023, this has not yet been fixed. The issue has been raised to Nintendo. ## Super Mario Maker (AWS) + For several months we have been aware of a previously undisclosed issue with Super Mario Maker regarding their use of AWS, specifically S3. Super Mario Maker uploads content such as courses and maker profiles to S3 using a NEX protocol called `DataStore`. This protocol gives the client a way to interact with, and upload new, S3 objects. S3 is a service, originally created by Amazon, to manage objects in a secure, scalable, way. For more information on S3 see the official [AWS docs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). When a client connects to Super Mario Maker for the first time, it first checks if your account has a "maker" object in S3 using `DataStore`. If not, the server gives the client a URL it can use to upload your "maker" object. Think of this as simply a file with some metadata that will describe you and your stats as you play the game. This object is required for continuing online, and will not function without it. @@ -53,4 +61,5 @@ The exception to this being Super Mario Maker. Since its release it has always c As of December 26th, 2023, Super Mario Maker's game server has been updated to now use this Nintendo-owned proxy. The changes made to AWS will no longer affect the game. ## Conclusion + We would again like to thank our community members and Nintendo for their roles in all of this. Sorting these issues out is a complex task, and we thank our community members who have not spam contacted Nintendo's support hotlines regarding these issues. The customer service reps on these hotlines likely have no influence over the day to day operations of these servers. Additionally, the issues mentioned here have already been brought to the proper channels. We will continue to update this blog post as new information comes in. diff --git a/blogposts/4-8-24.md b/blogposts/4-8-24.md index 2908033..43cd602 100644 --- a/blogposts/4-8-24.md +++ b/blogposts/4-8-24.md @@ -4,12 +4,13 @@ author: "Jon" author_image: "https://www.github.com/jonbarrow.png" date: "April 8, 2024" caption: "Hackless Wii U connections, farewell to Nintendo Network, and more" -cover_image: "/assets/images/blogposts/4-8-24.png" +cover_image: "/assets/images/blogposts/4-8-24.webp" --- -Today marks the end of Nintendo Network. As sad as this day is for many, it also comes with some positive developments. In this blog post we'll go over some new developments and plans, including official game support and a new way to connect to Pretendo ***without homebrew***! +Today marks the end of Nintendo Network. As sad as this day is for many, it also comes with some positive developments. In this blog post we'll go over some new developments and plans, including official game support and a new way to connect to Pretendo **_without homebrew_**! # A Somber Farewell + As of today, April 8th, 2024 Nintendo Network, the online servers powering the Wii U and 3DS's multiplayer, has shut down. Launching in 2012, Nintendo Network lasted exactly 12 years, 2 months, and 14 days (longer than the Wii!). This era of Nintendo's history is often looked down upon, made fun of, even by those of us in the scene. But we believe it's important to highlight the good that came from it, sending this generation off with the respect it deserves. Unlike the competitors at the time, Nintendo opted to continue with offering their online services free of charge. While it may not have had as many features as competitors, including staples like achievements, private messaging, etc. it cannot be denied that the low barrier of entry made it many users' first time playing online. The inclusion of Miiverse gave the games a sense of community still unseen in the current generation, and is something Nintendo fans and non-Nintendo fans alike would like to see again. @@ -21,16 +22,19 @@ The 3DS pushed hard for player interactions, going so far as to build systems in We at the Pretendo Network team, as much as we poke and tease, love these consoles and the impact they had on gaming. The Wii U was truly ahead of its time in many ways, plagued with bad marketing killing its chances at success. We thank Nintendo for giving so many of us entertainment in this era, and bringing many of us closer together. # SSSL -As a parting gift to you all, we are releasing our private SSL exploit for the Wii U: SSSL! Found by our very own [shutterbug](https://twitter.com/shutterbug20002), this exploit allows users to connect to Pretendo Network from a stock Wii U, with no homebrew or custom firmware at all; only a DNS change! We've been holding on to this exploit for this day for quite some time, in case Nintendo decided to issue patches for it. Select services which use their own SSL libraries are unsupported. This includes several 3rd-party titles like WATCH_DOGS and YouTube, as well as titles which run in an embedded browser like TVii, the eShop, and the Miiverse applet. ***Miiverse functionality IN GAMES is still supported through SSSL!*** + +As a parting gift to you all, we are releasing our private SSL exploit for the Wii U: SSSL! Found by our very own [shutterbug](https://twitter.com/shutterbug20002), this exploit allows users to connect to Pretendo Network from a stock Wii U, with no homebrew or custom firmware at all; only a DNS change! We've been holding on to this exploit for this day for quite some time, in case Nintendo decided to issue patches for it. Select services which use their own SSL libraries are unsupported. This includes several 3rd-party titles like WATCH_DOGS and YouTube, as well as titles which run in an embedded browser like TVii, the eShop, and the Miiverse applet. **_Miiverse functionality IN GAMES is still supported through SSSL!_** We hope this new method of connecting will be useful for those who have trouble installing homebrew, those who are worried about mods, and for users who may live in areas where local law may make it more difficult to install mods. For more information, see our [updated setup guide](/docs/install/wiiu)! -### *SSSL is only available for Wii U systems running firmware version 5.5.5 or higher. SSSL is not available for 3DS users.* +### _SSSL is only available for Wii U systems running firmware version 5.5.5 or higher. SSSL is not available for 3DS users._ # Archival + Over the past 6 months, we have been hard at work pushing for the archival of as much data as possible. To that end we created the [Archival Tools repository](https://github.com/PretendoNetwork/archival-tools), a selection of tools dedicated to archiving specific content from various games and services. Together with help from the community at large we have been able to archive several terabytes of this data from various services. All archived data we have collected, including SpotPass data, Super Mario Maker courses, many games leaderboards, etc. will be posted on the [Internet Archive](https://archive.org) at a later date once it has finished being processed. The data will be freely available for anyone to download. Some of this data will also make its way onto our servers at a later time. Specific dates for these events will come in the future. # Colors! 3D -As of April 7th, the day before the shutdown, Pretendo has collaborated with the developers of [Colors! 3D](https://www.colorslive.com/purchase/3ds), a drawing and art sharing game for the Nintendo 3DS. Together we have *officially* added support for each other, meaning Colors! 3D will continue to operate as normal when using Pretendo Network. Checkout their game, and their [Discord server](https://www.colorslive.com/discord), for more information on the Colors! franchise! + +As of April 7th, the day before the shutdown, Pretendo has collaborated with the developers of [Colors! 3D](https://www.colorslive.com/purchase/3ds), a drawing and art sharing game for the Nintendo 3DS. Together we have _officially_ added support for each other, meaning Colors! 3D will continue to operate as normal when using Pretendo Network. Checkout their game, and their [Discord server](https://www.colorslive.com/discord), for more information on the Colors! franchise! diff --git a/blogposts/5-19-24.md b/blogposts/5-19-24.md new file mode 100644 index 0000000..71f6d26 --- /dev/null +++ b/blogposts/5-19-24.md @@ -0,0 +1,32 @@ +--- +title: "Exciting updates for the 3DS" +author: "Jon" +author_image: "https://www.github.com/jonbarrow.png" +date: "May 19, 2024" +caption: "StreetPass Relay and 3DS notifications" +cover_image: "/assets/images/blogposts/5-19-24.webp" +--- + +Today we are releasing 2 big features for the 3DS: 3DS system notifications and StreetPass Relay! + +**_(Do note that both features are currently in active development, and may not always function properly. A common solution is to remove and reinsert your system's battery, in order to load the latest policylist, however do note this will have side effects in time-based games! It is common for some users to have one, or both, features not function. These issues are being looked in to)_** + +# System Notifications + +We can now send your 3DS systems notifications using the built-in notifications app! This allows us to deliver news updates right to your console, without needing to be in our Discord server, forum, or even following our social media. You can get all the latest news about the service, right from the console you're using it on! + +**_Not all announcements may make it to the system notifications however, namely very long announcements or those which require rich media like links, images, videos, and more._** + +![screenshot of the 3DS notifications app showing the release of SPR](/assets/images/blogposts/spr.webp) + +# StreetPass Relay + +StreetPass Relay was a feature built into the 3DS which allows users to gain "StreetPass'" from other users, even without physically being near them at the time. This worked by using a "StreetPass Relay Point", a wireless access point used by Nintendo Zone to store StreetPass data. When connecting to one of these relays, your console would upload your own StreetPass data as well as download the data of others from that relay. + +With our implementation, StreetPass Relay now works **_GLOBALLY_**, removing the need to be at a physical access point! You can now passively gain passes with other Pretendo users simply by being online. There are 2 things note, however: + +1. **_You must be using the latest release of Nimbus for StreetPass Relay to function. Previous versions do not have the correct URL patches for StreetPass Relay. You can download the latest release here https://github.com/PretendoNetwork/Nimbus/releases/latest_** +2. **_Due to the [questionable quality](https://twitter.com/MrNbaYoh/status/1783912413068222477) of the StreetPass parsers inside games and the fact that StreetPass Relay happens automatically, you can ONLY gain passes with people who you are friends with on the 3DS friends server. You will NOT be able to gain passes from any other users through StreetPass Relay._** + +![screenshot of the 3DS notifications app showing the notification list](/assets/images/blogposts/notification-list.webp) +![screenshot of the 3DS notifications app showing the SPR notification body](/assets/images/blogposts/notification-body.webp) diff --git a/blogposts/6-2-25.md b/blogposts/6-2-25.md new file mode 100644 index 0000000..1f39df5 --- /dev/null +++ b/blogposts/6-2-25.md @@ -0,0 +1,79 @@ +--- +title: "May Progress Update" +author: "Jon" +author_image: "https://www.github.com/jonbarrow.png" +date: "June 2, 2025" +caption: "Updates covering the first half of the year" +cover_image: "/assets/images/blogposts/6-2-25.jpg" +--- + +Hey all, Jon here! We know it's been quite a while since our last blog post. We planned to get these out more often, but alas more important issues and updates came first. We apologize for the lack of blog posts, and promise to get them out as often as we can. With that, halfway into the year seems like as good a time as any to summarize what we've been up to! + +(Note: This blog post will not cover *all* changes made since the last post, as there are far too many to list. We will be highlighting the more relevant/larger ones here) + +# Technical Updates + +Many of you voted to have more technical updates in blog posts from now on, and today marks the first time we do! + +## Splatoon Database Performance +Around May 26th, 2025 we noticed random instability in Splatoon. The game would work for a while, allowing players to create new, and join existing, matches, before seemingly randomly locking up. This locking up would cause subsequent requests to never get a response from the server, resulting in failed connections. Developers [shutterbug](https://github.com/shutterbug2000) and [quarky](https://github.com/ashquarky) quickly began investigating. We were unsure where the issue was at, but we had a pretty good idea of where to look. The locks could be happening in 2 places: + +1. The application layer. A few examples being: + 1. A locked [mutex](https://en.wikipedia.org/wiki/Lock_(computer_science)) which never releases. Our servers are written in [Go](https://go.dev/), and make use of [goroutines](https://go.dev/doc/effective_go#goroutines) for concurrency. Primitive Go types such as [slices](https://go.dev/doc/effective_go#slices) and [maps](https://go.dev/doc/effective_go#maps) can only be accessed by one goroutine at a time. To ensure this, a mutex is used to lock access when a goroutine needs the data, and is released when it's done with it. If a goroutine were to lock up and never release the mutex, then future goroutines will never be able to access it, and also be locked up waiting for the mutex to release. + 2. A poorly structured SQL query could lock up the database connection at the application layer, causing future requests to no longer be able to access the database. +2. The database layer. A few examples being: + 1. Database corruption could lead to queries failing or getting stuck, locking up the connection. + 2. Poor indexing causing full table scans on massive tables, locking up the connection. + 3. Bad queries causing the table to infinitely loop and lookup in itself, locking up the connection. + +Shutter began by checking the code for locked mutexes and the server logs for any abnormalities. Our game server libraries are split into 3 separate modules, one of which we colloquially refer to as ["common"](https://github.com/PretendoNetwork/nex-protocols-common-go). This module holds all the "common" default implementations of features used by many games. Quarky began by investigating the database itself. Together, they were able to narrow down the problem areas to 2 functions. Lockups would happen in the [`MatchmakeExtension::AutoMatchmake_Postpone`](https://github.com/PretendoNetwork/nex-protocols-common-go/blob/50586821d228cdc2bae728797febdae51e67fe5b/matchmake-extension/auto_matchmake_postpone.go) and [`MatchMaking::UnregisterGathering`](https://github.com/PretendoNetwork/nex-protocols-common-go/blob/50586821d228cdc2bae728797febdae51e67fe5b/match-making/unregister_gathering.go) functions. These functions are responsible for creating/joining multiplayer sessions, and for deleting them when the game is over. + +There did not appear to be any areas where a mutex would not release, so we switched our attention back to the database itself. We had noticed some wonky behavior from the database earlier as well, later fixed by [Will](https://github.com/binaryoverload), and I had a hunch that this is where the issue would lie as well. Upon investigation, we found several instances of poor database performance, such as a lack of indexes on some "hot spots" resulting in slower queries. Most notably, we found 2 queries that had become locked, running over 7 and 9 hours respectively. These queries are what was causing the database to lock up, and requests to not get responses. But we still didn't quite know WHY they were locking. It was not initially clear if the issue was due to a looping query, poor indexes, or database corruption. The database in question only held ephemeral data about temporary matches, however, so we opted to just rebuild the database and add in the missing indexes at the same time. Doing so would cover both possibilities of database corruption and missing queries causing the locks, and so far things have once again become stable. + +During the investigation I also noticed a lack of a proper timeout mechanism in the Go functions that made the database queries. Regardless of the reason for *why* the queries locked up, having a timeout would prevent things from looping *forever*. + +This investigation has highlighted some key areas of improvement in regards to our database performance, and we have already begun investigating using even better indexes (currently being tested in Minecraft) and will begin to implement proper query timeouts. So while it is unfortunate that Splatoon was down, in the end this will result in even better performance moving forward. + +## `DataStore` Protocol Rework +As mentioned above, many games share a "common" implementation of certain features. This allows us to define this functionality once and simply tell a server to use it. In the past, our philosophy was to be as unopinionated as possible in this regard, only implementing basic boilerplate for the functions and providing developers a series of configurations and hooks to use. The actual *logic* of the functions was still up to the developers to set. This was done so that developers outside of our team could more easily integrate our code into their systems, by just hooking up whatever stack they already use. + +We have recognized the limitations of this approach however, and have decided to become more opinionated. This first took place in the matchmaking code, made by [Dani](https://github.com/DaniElectra), making it so that all the logic for matchmaking now lives in our "common" module. This now allows our code to be more "plug-and-play", simply telling servers to use matchmaking and letting our logic do the rest. + +Another protocol which used this unopinionated philosophy was our [`DataStore`](https://nintendo-wiki.pretendo.network/docs/nex/protocols/datastore) implementation. `DataStore` is a protocol developed by Nintendo allowing for "object" (file) storage in games, essentially acting as a frontend for [S3](https://en.wikipedia.org/wiki/Amazon_S3). This protocol is what powers games like Super Mario Maker (courses are "objects"), Animal Crossing: New Leaf (dreams are "objects"), Mario vs. Donkey Kong: Tipping Stars (levels are "objects"), and more. + +We have now begun the process of moving our `DataStore` implementation into a more opinionated implementation, allowing for the same sort of "plug-and-play" nature as seen in the matchmaking changes. Progress can be seen [here](https://github.com/PretendoNetwork/nex-protocols-common-go/pull/53). Once finished, this will be our first *fully complete* protocol implementation, allowing for MANY games to get their "object" features working without any extra work. This is also why Mario vs. Donkey Kong: Tipping Stars is still offline, it is so old that it needs to be rewritten from the ground up and is mostly just `DataStore`, making it the perfect candidate to test these new changes against. + +Eventually we hope to do this with *all* protocols in the future. + +# New Games/Updates + +Several new games have joined us since our last blog post! Both existing games coming out of beta, and entirely new games! + +Also a big thank you to everyone outside of our team as well for helping debug and suggest changes! + +## Splatoon +As a belated celebration for Splatoon's 10th anniversary (we deeply apologize that the stability issues mentioned above prevented us from doing anything on time), for the next round of rotations (starting June 7th) our rotations will feature previously banned stages! Allowing banned stages has been a highly requested feature for a long time, so we felt this was a good time to try it out! + +## Animal Crossing: New Leaf +Thanks to the work by [shoginyan](https://github.com/shoginyan) and [shutterbug](https://github.com/shutterbug2000), Animal Crossing: New Leaf has officially left beta testing and is available to everyone! Note that Dream Suite is not yet implemented (see [`DataStore` Protocol Rework](#datastore-protocol-rework)), but multiplayer is supported! We've also identified an issue regarding best-friend messages, of which a fix is being actively tested. + +## Mario Kart 7 Communities +Mario Kart 7 now has partial support for communities! Leaderboards are not currently implemented, as Mario Kart 7 uses a version of the [`Ranking`](https://nintendo-wiki.pretendo.network/docs/nex/protocols/ranking/legacy) that is very different to the one used by modern games. + +## Yo-kai Watch 2 and Yo-kai Watch Blasters +[shoginyan](https://github.com/shoginyan) has also kick-started Yo-kai Watch 2 and Yo-kai Watch Blasters both into development! Yo-kai Watch 2 has left beta and is available to everyone, while Yo-kai Watch Blasters (and variants) is currently in beta testing. + +## Monster Hunter 4 Ultimate +Monster Hunter 4 Ultimate has officially left beta testing! We have also removed the region lock, allowing for experimental crossplay between MH4U and MH4G players! You may encounter technical difficulties when playing across regions due to this experimentation, so please report any issues you encounter to [the game's issue tracker](https://github.com/PretendoNetwork/monster-hunter-4-ultimate/issues/new/choose). + +## Swapdoodle +Swapdoodle was one of the first titles Dani wanted to work on, prior to him joining our core dev team. After joining, focus was shifted elsewhere and work stopped on Swapdoodle fairly early. However thanks to the work by outside contributors [Silver-Volt4](https://github.com/Silver-Volt4) and [CenTdemeern1](https://github.com/CenTdemeern1), work on Swapdoodle has once again picked up! They took it upon themselves to implement the server entirely, with promising results! For more information, see: + +- https://forum.pretendo.network/t/we-implemented-swapdoodle-and-would-like-to-contribute-it/16204 +- https://github.com/PretendoNetwork/swapdoodle/pull/1 + +## Dr. Luigi and Dr. Mario: Miracle Cure +Both Dr. Luigi and Dr. Mario: Miracle Cure have officially left beta testing! Both titles are now available to the public! + +## The Legend of Zelda: Tri Force Heroes +After several months of downtime, The Legend of Zelda: Tri Force Heroes is officially back online! This was one of our legacy games requiring upgrades to our latest libraries, and has finally had its issues ironed out. Due to some recent changes to our general matchmaking code, the games multiplayer region lock was unintentionally returned. This is being looked into and should be fixed in due time. diff --git a/blogposts/6-29-24.md b/blogposts/6-29-24.md new file mode 100644 index 0000000..b6c8bd2 --- /dev/null +++ b/blogposts/6-29-24.md @@ -0,0 +1,98 @@ +--- +title: "June Progress Update" +author: "Jon" +author_image: "https://www.github.com/jonbarrow.png" +date: "June 29, 2024" +caption: "Updates on 6 games, including beta testing for Smash, Puyo Puyo Tetris, and more!" +cover_image: "/assets/images/blogposts/june-29-2024/preview.webp" +--- + +_Credits for preview image:_ + +- Toon Link - https://www.smashbros.com/wiiu-3ds/us/characters/toon_link.html + +As June comes to a close we'd like to take this time to welcome some new team members and give some updates on what work we've been doing, including beta testing for some brand new games! + +# New Teammates + +To kick things off I'd like to welcome 2 of our latest teammates [MatthewL246](https://github.com/MatthewL246) and [wolfendale](https://github.com/wolfendale)! Together they have been doing some fantastic work, some of which is still yet to be seen. + +[MatthewL246](https://github.com/MatthewL246) has been hard at work introducing Docker configurations to our servers, as well as working with [SuperMarioDaBom](https://github.com/SuperMarioDaBom) and 2 non-Pretendo developers [Jelle van Snik (mrjvs)](https://mrjvs.com) and [William Oldham (BinaryOverload)](https://williamoldham.co.uk), to prepare our services for their eventual move to our new infrastructure! While much of this work has not been deployed yet, it is vital for Pretendo moving forward as we transition to a containerized deployment on real hardware. These changes will make managing and deploying servers much simpler in the future. + +[wolfendale](https://github.com/wolfendale) has been working tirelessly with [DaniElectra](https://github.com/danielectra) and myself on [`nex-go`](https://github.com/PretendoNetwork/nex-go), and some related services. This library is the **_heart_** of our game servers, implementing the lower level transport protocols and tools/features needed to build _all_ of our game servers, and is one of the more difficult areas to work in. The work done on this library is priceless, and will have positive effects on all games across the board. + +# General Server Updates + +Before talking about the new games joining our beta testing, we'd like to touch on some more general updates which apply to all games. As mentioned, [wolfendale](https://github.com/wolfendale) has been working almost exclusively on [`nex-go`](https://github.com/PretendoNetwork/nex-go) since joining the team. He, along with [DaniElectra](https://github.com/danielectra) and myself, has been doing fantastic work on debugging some long-standing issues, providing bug fixes and optimizations, introducing new unit testing, and implementing some key missing features. This work not only drastically improves stability, but brings our implementation closer to the original with more accurate emulation. + +He has also been tackling the task of [optimizing our database queries](https://github.com/PretendoNetwork/friends/pull/22) on the friends server. The friends server is one of the most important services of Nintendo Network. Without a stable connection to the friends server, the console will not attempt to connect to any individual game server, and is the cause of the common [X01-0502](https://forum.pretendo.network/t/error-code-101-0502-no-solution/1426/5?u=pn_jon) error. Optimizations and bug fixes like these to the friends server will ensure connections to game servers also remain stable. + +While most of these updates have not yet been deployed yet (a select few have been hot-patched into existing deployments), and some have not yet been merged at all, the changes that have been made recently should show very positive results once deployed (including tackling the common [X01-0502](https://forum.pretendo.network/t/error-code-101-0502-no-solution/1426/5?u=pn_jon) error). We hope to get all of these new updates out relatively soon, so that all games may benefit from the added stability. + +![Screenshot of shutter on Discord saying "@ashquarky @Jon @DaniElectra ok so! i can confirm 2 things: 1: Splatoon is now working on nex v2 (i was having @ashquarky [PN_quarky] change the wrong thing lol) 2: Splatoon did not work until I used the master version of nex-go, this means that the new changes to nex-go likely help a lot with stability 🎉"](/assets/images/blogposts/june-29-2024/shutter-nex-go.webp) + +[DaniElectra](https://github.com/danielectra) has also been spending quite some time [reworking our matchmaking logic from scratch](https://github.com/PretendoNetwork/nex-protocols-common-go/pull/35). These updates should bring more stability when it comes to matchmaking, as well as better tooling for developers to work on new games. + +Similarly to [Dani's](https://github.com/danielectra) matchmaking rework, I have been [reworking our entire type system from scratch](https://github.com/PretendoNetwork/nex-go/pull/56). These changes should provide a much better development experience for us moving forward, streamlining many previously difficult to do tasks such as data storage and storing type data in databases. This should result in faster, and more reliable, server development moving forward. + +# New Games and Updates + +Now into what most of you came here for; new games and updates in beta testing! This blog post will cover a whopping **_ten_** games. Some games are receiving general updates, while others are joining us for the first time. We will also be aiming to release some smaller, simpler, games on a more frequent basis. Some games share much of their internals with existing games, making it trivial to get the basics up and running. We do not have an official release schedule, but we expect to release more simple games more often. + +_Most of the games mentioned here are only available for beta testers at the time of writing._ + +_All games begin their life in beta testing, only available to testers. Once more features have been added, and pending the evaluation of each game's stability, they will each become available to the general public on a game-by-game basis. Until then, consider [supporting the project](https://pretendo.network/account/upgrade) to gain early beta access_ + +**_BETA SERVERS ARE NOT CONSIDERED STABLE, AND OFTEN LACK MANY FEATURES. USE AT YOUR OWN RISK_** + +## 🥄 + +Thanks to work done by [wolfendale](https://github.com/wolfendale), [DaniElectra](https://github.com/danielectra) and myself on [`nex-go`](https://github.com/PretendoNetwork/nex-go), as well as work down by [Ash](https://github.com/ashquarky) and [shutterbug](https://github.com/shutterbug2000) on our [Splatoon netcode specifically](https://github.com/PretendoNetwork/splatoon/pull/2), Splatoon has **_officially_** begun its migration to our newest library versions. These changes have, so far, resulted in much more stable and reliable matchmaking across the board. These changes are available **_TODAY_**, for **_everyone_**! + +If you experience any issues with Splatoon still, feel free to reach out for support on our [support forum](https://forum.pretendo.network/c/support/6) and file bug reports on the [Splatoon GitHub repository](https://github.com/PretendoNetwork/splatoon). + +![Screenshot of a pending Splatoon lobby](/assets/images/blogposts/june-29-2024/splatoon-match.webp) + +## A New Title Appears + +Thanks to work done by [SuperMarioDaBom](https://github.com/SuperMarioDaBom), **Super Smash Bros. 4 Wii U** is now **_officially_** available for beta testers! The 3DS version is not currently supported, though the controller app should work. Not everything is implemented, however matchmaking is working as expected. Spectating and sharing do not work, nor has Miiverse integration been tested. Attempting to share anything in game may cause the game to stop responding due to unimplemented methods. + +![Screenshot of Pikachu and Toon Link fighting in Smash 4 on the Wii U](/assets/images/blogposts/june-29-2024/smash4-wiiu-match.webp) + +## Gotta Catch 'em All! + +Thanks to work done by [shutterbug](https://github.com/shutterbug2000), **Pokémon Generation 6 (X & Y, Omega Ruby & Alpha Sapphire)** is now **_officially_** available for beta testers! Not all features have been implemented. While still early in development, and missing some recent stability fixes, wonder trades have been fully implemented, and PSS is in active development! + +
+ +| | | +| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| ![Screenshot of Pokemon finding a trade](/assets/images/blogposts/june-29-2024/pokemon-partner-found.webp) | ![Screenshot of Pokemon finishing a trade](/assets/images/blogposts/june-29-2024/pokemon-trade-complete.webp) | + +
+ +## Puyo! + +Thanks to work done by [Ash](https://github.com/ashquarky), **Puyo Puyo Tetris** is now being worked on. Matchmaking and rankings are both working as expected. This game is not yet available for beta testing, as it relies on unreleased library changes, however it will be released for beta testers soon! + +| | | +| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| ![Screenshot of Puyo Puyo Tetris in a match](/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.webp) | ![Screenshot of Puyo Puyo Tetris rankings](/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.webp) | + +## An Apple a Day + +Thanks to work done by [shutterbug](https://github.com/shutterbug2000), _both_ **Dr. Luigi (Wii U) and Dr. Mario: Miracle Cure (3DS)** are now **_officially_** available for beta testers! Both games feature fully implemented matchmaking and rankings. + +| | | +| -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| Screenshot of Dr. Luigi in a match | ![Screenshot of Dr. Mario in a match](/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.webp) | + +## Minecraft + +Minecraft has been available for beta testers for some time now, and is now receiving some new updates! Thanks to work done by [Ash](https://github.com/ashquarky), Minecraft is being updated to the latest version of our libraries which should bring with it more stability and feature support! + +![Screenshot of Minecraft in a minigame lobby](/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.webp) + +# Conclusion + +![Screenshot of ACNL saying "Hello there, Mayor Pretendo" teasing ACNL being worked on](/assets/images/blogposts/june-29-2024/mayor-pretendo.webp) diff --git a/blogposts/8-2-24.md b/blogposts/8-2-24.md new file mode 100644 index 0000000..5a66ab8 --- /dev/null +++ b/blogposts/8-2-24.md @@ -0,0 +1,111 @@ +--- +title: "July Progress Update" +author: "Jon" +author_image: "https://www.github.com/jonbarrow.png" +date: "August 2, 2024" +caption: "News on AC:NL, general server improvements, Discord bot updates, and more!" +cover_image: "/assets/images/blogposts/august-2-2024/preview.webp" +--- + +While July didn't see as many new games join our roster, we were all still hard at work. With a focus on enhancing performance and user experience, July brought crucial updates to our services. This blog post will cover many updates to our servers, patches, and go over some future plans we have for popular games like Animal Crossing: New Leaf! + +# General Server Updates + +As mentioned in [our last blog post](https://pretendo.network/blog/6-29-24), we had many pending server updates yet to be merged/released. While not all of them have been merged/released yet still, several have been! Our core game server library [`nex-go`](https://github.com/PretendoNetwork/nex-go) continued to get love last month, bringing it several new performance boosts. + +Together with [wolfendale](https://github.com/wolfendale), we spent much of July reverse engineering several core systems, including the entire packet retransmission system. Before now, this was a very basic, inaccurate, implementation of how [PRUDP](https://developer.pretendo.network/overview/prudp) handles dropped packets. With our implementation now more accurate, both clients and servers should be seeing substantially less dropped packets, resulting in better connection stability. + +Additionally some changes were made internally to address issues such as [goroutine](https://go.dev/tour/concurrency/1) overuse, poorly implemented hashing algorithms, and issues regarding the number of allocations each server performs. These issues all lead to degraded server performance and higher system resource usage. Addressing these issues has substantially dropped the libraries overall footprint (taking the average amount of memory used per server from \~300mb at the low end, to just barely \~50mb!) and increased general performance. + +For a full breakdown of last month's changes to `nex-go`, [see here](https://github.com/PretendoNetwork/nex-go/commits/master/?since=2024-07-01&until=2024-08-01). + +# Better Infrastructure + +As mentioned in [our last blog post](https://pretendo.network/blog/6-29-24), we have been working closely with 2 non-Pretendo developers [Jelle van Snik (mrjvs)](https://mrjvs.com) and [William Oldham (BinaryOverload)](https://williamoldham.co.uk). These are personal friends working in these fields professionally, who have graciously helped with restructuring our internal infrastructure. With their help, we have been making even more strides towards full containerization through [Docker](https://docker.com) and a deployment strategy built on top of [Kubernetes](https://kubernetes.io). + +Over the past month they have been making great strides towards this goal, completely redesigning our deployment strategy from the ground up. We have also begun releasing pre-built Docker containers for our servers to aid in this, which can be found on our [GitHub organization](https://github.com/orgs/PretendoNetwork/packages?visibility=public). + +Once complete, these changes should help dramatically increase our productivity by streamlining many of our more tedious workflows, leading to higher server output in the long run! They also should help increase overall stability through failsafes and rollovers in the event of a server failure! + +# New Games and Updates + +Last month saw less new games join our roster than June (hard to beat 10 new games!), but that doesn't mean games were not worked on. Last month saw the addition of two new games, as well as several existing games/services receiving new updates/features! + +**_All games begin their life in beta testing, only available to testers. Once more features have been added, and pending the evaluation of each game's stability, they will each become available to the general public on a game-by-game basis. Until then, consider [supporting the project](https://pretendo.network/account/upgrade) to gain early beta access._** + +**_BETA SERVERS ARE NOT CONSIDERED STABLE, AND OFTEN LACK MANY FEATURES. USE AT YOUR OWN RISK_** + +## Smash 3DS + +Thanks to work done by [SuperMarioDaBom](https://github.com/SuperMarioDaBom), **Super Smash Bros. 4 3DS** is now **_officially_** available for beta testers! Just like the Wii U version, only matchmaking is implemented. All other features are still being worked on. Unlike the Wii U version, trying to use an unimplemented feature will not hang the game, however it is still not recommended to try anything besides matchmaking. + +![Screenshot of the Smash Bros. 3DS multiplayer menu](/assets/images/blogposts/august-2-2024/smash-3ds.webp) + +## Game & WARIO + +Thanks to work done by [Jemma](https://github.com/CaramelKat) and [Trace](https://github.com/TraceEntertains), **Game & WARIO** is now **_officially_** available on Miiverse for beta testers! Most features have been tested, however as a beta title there may still be issues. + +
+ +| | | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| ![Screenshot of the Game & WARIO online menu](/assets/images/blogposts/august-2-2024/game-and-wario-1.webp) | ![Screenshot of Game & WARIO drawing Santa](/assets/images/blogposts/august-2-2024/game-and-wario-2.webp) | + +
+ +## Minecraft + +Thanks to work done by [Ash](https://github.com/ashquarky), **Minecraft: Wii U Edition** is now **_officially_** available to the public! You can now play this LCE classic with friends again, in private worlds or in minigames. + +Due to safety concerns regarding the games lack of official anti-cheat, _public minigames_ are currently disabled. For the time being, use the `Friends` tab on the far right to access games. We are interested in opening the game up fully in the future, so keep an eye out for more future updates! + +![Screenshot of the Minecraft: Wii U Edition online menu showing that only private matches are available](/assets/images/blogposts/august-2-2024/minecraft.webp) + +## Inkay + +Thanks to work done by [Ash](https://github.com/ashquarky), [Inkay](https://github.com/PretendoNetwork/Inkay) has received a massive update last month! While the changes may be small, they have a huge impact; the additional patches provided by [Nimble](https://github.com/PretendoNetwork/Nimble) are being phased out! For those unaware, our Wii U patches come in a set: + +- [Inkay](https://github.com/PretendoNetwork/Inkay) - The main Pretendo Network patches connecting your Wii U to our servers. Standard Aroma plugin +- [Nimble](https://github.com/PretendoNetwork/Nimble) - Supplementary patches for patching the BOSS (SpotPass) policylist. Aroma setup module + +Historically [Nimble](https://github.com/PretendoNetwork/Nimble) has been required for games which make use of SpotPass features, such as Splatoon. Before the console enables SpotPass, it downloads what is called the "policylist". This tells the console which background tasks to enable and what their priorities are. After the Nintendo Network shutdown, Nintendo has changed the official policylist to disable all SpotPass features. The Wii U downloads this policylist extremely early in the boot process, earlier than standard Aroma plugins have access to. Setup modules _are_ loaded early enough, however, thus [Nimble](https://github.com/PretendoNetwork/Nimble) was born. + +With the latest changes made to [Inkay](https://github.com/PretendoNetwork/Inkay), after the plugin is loaded it forces the console to refresh the policylist, which triggers a redownload using our patched URLs. This essentially removes the need for [Nimble](https://github.com/PretendoNetwork/Nimble) entirely, as well as dramatically increases SpotPass reliability in certain games (such as 104-2210 in Splatoon). To download the latest release, see the [Inkay releases page](https://github.com/PretendoNetwork/Inkay/releases/latest)! + +Additionally thanks to collaborations with [Maschell](https://github.com/Maschell) (the creator of the Aroma CFW), [Inkay](https://github.com/PretendoNetwork/Inkay) is now also available through https://aroma.foryour.cafe! Updates to [Inkay](https://github.com/PretendoNetwork/Inkay) can now be managed through the Aroma updater on-console! + +## Miiverse + +Thanks to work done by [Jemma](https://github.com/CaramelKat), Miiverse in general has received bug fixes and performance improvements last month. The biggest change was improved data/asset caching, which has dramatically improved the load times on Juxtaposition! These changes affect both the Wii U and 3DS versions, as well as the browser version. + + + +Additionally a long standing issue of friends not properly being handled in WaraWara Plaza has also been fixed! + +![Screenshot of WaraWara Plaza showing the Miis of friends being positioned correctly](/assets/images/blogposts/august-2-2024/wwp.webp) + +## Animal Crossing: New Leaf + +As teased in [our last blog post](https://pretendo.network/blog/6-29-24), Animal Crossing: New Leaf has **_officially_** entered development! Features such as Tortimer Island are showing signs of life as this highly requested game starts to go online! + +
+ +| | | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![Screenshot of user "Pretendo" arriving in town "Rin" in Animal Crossing: New Leaf](/assets/images/blogposts/august-2-2024/acnl-1.webp) | ![Screenshot of two players matched together in Tortimer Island in Animal Crossing: New Leaf](/assets/images/blogposts/august-2-2024/acnl-2.webp) | + +
+ +Additionally, we have begun the process of processing the data from our Dream Suite archive. Prior to the Nintendo Network shutdown, our team spent a considerable amount of time archiving data from many games, including all available towns from Dream Suite. We collected over **_200GB_** of data from Dream Suite and a total of **_239,105_** towns! + +We plan to eventually publish the raw data on the [Internet Archive](https://archive.org/), as well as on our own website where you can view/download the pre-processed data. Currently the amount of data displayed is limited, and the website is still in development, so it's not yet ready for release. However we plan to look into extracting more data from the towns themselves, and possibly making them available as town backups that can be directly imported into save files! + +**_Eventually we will process and release all the data (around 1.6TB) for all games/services we collected data for. Animal Crossing: New Leaf is the first of these to start it's processing._** + +![Screenshot of the work in progress Animal Crossing: New Leaf archive website. Website contains a table of towns with information on their data ID, version, name, uploader name, creation and updated dates, the time the last person visited, the total number of visits, and the country of origin](/assets/images/blogposts/august-2-2024/acnl-site.webp) + +# Conclusion + +Thank you everyone for your continued support of the project! We know this progress update may seem small, but we only go over the largest changes! Most of our work consists of small bug fixes, library development, and lots and lots of research time. We hope you all stay tuned for future updates! diff --git a/blogposts/9-26-21.md b/blogposts/9-26-21.md index e8fa3b4..75bc7fd 100644 --- a/blogposts/9-26-21.md +++ b/blogposts/9-26-21.md @@ -4,7 +4,7 @@ author: "Jon" author_image: "https://www.github.com/jonbarrow.png" date: "September 26, 2021" caption: "First ever progress recap" -cover_image: "/assets/images/blogposts/9-26-21.png" +cover_image: "/assets/images/blogposts/9-26-21.webp" --- ### If you want to see more frequent updates, consider supporting us on [**Patreon**](https://patreon.com/pretendonetwork) @@ -16,54 +16,75 @@ cover_image: "/assets/images/blogposts/9-26-21.png" Welcome to the first-ever Pretendo Network recap blog post! Going forward we will post these whenever major updates happen to give you all the latest news about the project in an easy to digest way ## Funding + Before we begin I'd like to make a bit of serious statement when it comes to the future development of Pretendo. The project has grown larger and larger, and as each day goes by it sometimes seems as if more tasks get added to our to-do list than we are completing. This is because many of the people working on the project are volunteering their free time, are university students or, personally, are working full time jobs. This results in slow development time, slow releases, limited research time, and of course a community which could be happier The solution to this is making Pretendo a full time job! In order to achieve this goal we have setup a Patreon to help in getting funding for the project. Doing so will allow for more time to dedicate to Pretendo which will result in faster development and a faster, more high quality, release for you all! No one is obligated to donate, but if you would like to help support Pretendo consider checking out our Patreon. And if you cannot financially support, that's okay too! You can always help in other ways like spreading the word, giving suggestions for tier rewards, feature suggestions to help make Pretendo even better, and as always helping keep the community safe and fun for everyone by just being kind! And now, without further ado; ## It's the little things in life + A few smaller updates that don't need their own section before we get into the bigger updates; Our website got a new revamp! The design was completely redone, we added a progress page to show data from our Trello and give you all an idea of whats working and whats planned, and we of course added this blog section. The Discord server got a voice channel, as well as some new bot updates to both Yammamura and Chubby. Yammamura now makes use of Discord's new /commands to assign roles, and Chubby now moderates chat better by using AI to detect NSFW images and removing them as needed ## Back to the basics + The [account server](https://github.com/PretendoNetwork/account) got a complete rewrite from the ground up. This cleaned up all of the old code written as far back as 2017 during initial testing (when Pretendo was still called RiiU!), making the code base much cleaner, easier to navigate, and more performant. Any future updates to the account server will now be much easier to implement ## Homebrew clearance-sale + As of 2019 Pretendo has made great progress on implementing a custom eShop. A lot of research and work has gone into the SOAP servers and how the console requests tickets and other title information. Our custom eShop is able to install homebrew apps packed as WiiU titles. Due to copyright reasons with regards to homebrew applications though, Pretendo with most likely _**not**_ be using any kind of custom eShop implementation in our official servers. If this ever changes, however, we have the foundation to support it +

Here’s a video as proof of it working through the official eShop app on the console https://t.co/akmOIjopCq pic.twitter.com/mVTnJQJPwi

— Pretendo (@PretendoNetwork) December 8, 2019
## All my friends are online mom! + The Friends server, which is the main game server every console always connects to on boot, can now be connected to! This is a huge milestone for Pretendo, since no other games will work without it. All games require an existing connection to the Friends server to operate, and will attempt to connect to it if not already. At this stage most functionality is stubbed and the data sent back is hard-coded, but it's enough to get other games online +

The #WiiU starting to show lines of life on #Pretendo! The beginnings of online have started!#PretendoNetwork pic.twitter.com/8ocwVSLvRt

— Pretendo (@PretendoNetwork) January 17, 2020
## Who needs Skype + WiiU Chat, a popular WiiU title many years ago, was shut down along side Miiverse most likely due it's heavy ties to the social media platform. As of 2020, Pretendo has gotten WiiU Chat back online enough to boot into the title, display a list of friends to call, and attempt to make a connection! As of now though, a full video call cannot be made. WiiU Chat is very complex under the hood and requires additional research into how the WiiU handles title background tasks +

We have begun the process of restoring #WiiU Chat! pic.twitter.com/qzIfBu8cQZ

— Pretendo (@PretendoNetwork) February 18, 2020
## Where's the remote?! + Some small progress was made in regards to getting TVii booting again on the WiiU. We will not be reviving this title completely, as it relied on streaming TV content we do not have the rights for, but the research did help give us some insight into how the WiiU handles custom webpage functionality +

With the help of @shutterbug20002 we have started researching the TVii app and it’s functionality pic.twitter.com/xmmuVYB6ni

— Pretendo (@PretendoNetwork) May 19, 2020
## Who's in charge of the Festival? + Another huge milestone for Pretendo was hit in January of this year! The WiiU and 3DS both use a service called BOSS/SpotPass to securely register tasks which send/request certain encrypted title contents. Splatfests used by Splatoon are one of these contents! Pretendo can now fully encrypt and decrypt BOSS/SpotPass contents, meaning we can serve custom Splatfests through our network. We are aware that custom Splatfest projects have existed in the past, however they relied on Homebrew and overwriting the existing Splatfest files on the console. With this update we can now make our own and host them the way they were originally intended to be hosted

Sorry for the late night Tweet, but we have a special message from Callie and Marie! pic.twitter.com/HLZxyRf1EU

— Pretendo (@PretendoNetwork) January 31, 2021
## Teamwork makes the dream work + Archive Team, known for their _extensive_ work put into archiving everything on the internet, contacted us to help them archive all of the courses uploaded to Nintendo's official servers! Together we were able to do just that, dump and archive all the course data and associated metadata to be preserved for future generations! ## Lets get Making! + Super Mario Maker makes the stage as the first official Nintendo game to go online and start getting functionality with Pretendo. At this stage nearly all content is either stubbed or hard coded just to get the game online and see how it reacts to our data while researching. Only the course world boots here +

Super Mario Maker 1 now officially goes online with Pretendo!#WiiU #supermariomaker #pretendo pic.twitter.com/Gn2IxlS47D

— Pretendo (@PretendoNetwork) August 20, 2021
## Let's a-go! + Very soon after booting, course uploading was re-implemented in Super Mario Maker. This means new content can continue to be added to the game through Pretendo! Not shown in the tweet is course world also now making use of the newly uploaded courses +

pic.twitter.com/iIVW6pJJeS

— Pretendo (@PretendoNetwork) August 29, 2021
## Going mobile + A few patches and some account server updates later, Pretendo has gotten the 3DS connecting and online with our custom servers! Just like the WiiU, Friends was the first target as it's required for all other games to boot and just like the WiiU at this stage most of the functionality is stubbed just to get it online for other games. With this, though, a whole new door is opened for Pretendo. PNIDs (the Pretendo version of a NNID) are not supported on the 3DS as of right now. The 3DS uses a different account system which more closely resembles the Wii than the WiiU, and thus is able to go online and play games without a NNID +

3DS showing signs of life! pic.twitter.com/cXyi0zbSD1

— Pretendo (@PretendoNetwork) September 11, 2021
## Mario on the go + Immediately after getting Friends online, work began on Super Mario Maker for the 3DS. All possible functionality was added, making it the first title to ever get 100% support on Pretendo! Though with how limited the games content is, that's not saying a whole lot +

We heard y’all like the 3DS and Super Mario Maker pic.twitter.com/w5ll3h1tPx

— Pretendo (@PretendoNetwork) September 12, 2021
That's all for now! Keep an eye out for more updates, and happy playing! - \ No newline at end of file + diff --git a/blogposts/9-29-21.md b/blogposts/9-29-21.md index 815f011..2afc83f 100644 --- a/blogposts/9-29-21.md +++ b/blogposts/9-29-21.md @@ -4,7 +4,7 @@ author: "Jemma" author_image: "https://www.github.com/caramelkat.png" date: "September 29, 2021" caption: "What's Juxtaposition and where it's headed" -cover_image: "/assets/images/blogposts/9-29-21.png" +cover_image: "/assets/images/blogposts/9-29-21.webp" --- ### If you want to see more frequent updates, consider supporting us on [**Patreon**](https://patreon.com/pretendonetwork) @@ -12,7 +12,9 @@ cover_image: "/assets/images/blogposts/9-29-21.png" Oh boy another recap post! This time we're going to talk a little bit about Juxtaposition now and what our plans are going forward. ## First off, what is Juxtaposition? + Juxtaposition (or Juxt for short) is the Pretendo Network Miiverse replacement. This includes but is not limited to: + - Wii U App - 3DS App - Game API @@ -21,16 +23,18 @@ Juxtaposition (or Juxt for short) is the Pretendo Network Miiverse replacement. Juxt isn't the entirety of the Pretendo Network, it's a small but core piece that makes the entire network work in harmony. ## A brief history -Juxt started out before I actually even joined the Pretendo Network development team. In 2019 I contacted [quarky](https://heyquark.com/) about their [miiverse-api-poc](https://github.com/QuarkTheAwesome/miiverse-api-poc) server that had support for the Splatoon Plaza posts, and that was it. The original intent was to take the software and build off of it to generate files for Wara Wara Plaza. + +Juxt started out before I actually even joined the Pretendo Network development team. In 2019 I contacted [quarky](https://heyquark.com/) about their [miiverse-api-poc](https://github.com/QuarkTheAwesome/miiverse-api-poc) server that had support for the Splatoon Plaza posts, and that was it. The original intent was to take the software and build off of it to generate files for Wara Wara Plaza. ![](https://cdn.discordapp.com/attachments/868275684630470697/892881351223676968/unknown.png) + > Hello World! Check out the very first instance of Wara Wara Plaza rendering a custom file. A bit underwhelming looking back huh? From there we quickly realized that the scope of this project was going to be much larger than we though, and moved on to experimenting with the Miiverse Applet itself [yt-iframe](d9VAr9sEvCo) -> Check out this ancient video of the first demo website that was running in the Miiverse Applet. +> Check out this ancient video of the first demo website that was running in the Miiverse Applet. Shortly after this the project was absorbed into the Pretendo Network, and our full focus was put onto getting the Miiverse Applet patched and working. @@ -48,91 +52,91 @@ Shortly after this the project was absorbed into the Pretendo Network, and our f Believe it or not Juxt is actually fairly well featured at the moment! Here's a ~~brief~~ list of what’s working for the 3DS and Wii U now. - --- #### Wii U + - Communities - - View All Communities - - Searching for Community - - Following/Unfollowing - - Showing Followers - - Showing Posts - - Sorting Posts by Type - - Creating New Post + - View All Communities + - Searching for Community + - Following/Unfollowing + - Showing Followers + - Showing Posts + - Sorting Posts by Type + - Creating New Post - Posts - - Yeah! - - Replies - - Spoilers + - Yeah! + - Replies + - Spoilers + - Text + - Drawing + - Screenshots + - New Post + - Emotion - Text - Drawing - - Screenshots - - New Post - - Emotion - - Text - - Drawing - - Screenshot - - Spoiler + - Screenshot + - Spoiler - Users - - Mii Profile Pictures - - Following/Unfollowing - - Display Verified - - Display Followers and Following - - Display Country and Game Experience - - Posts - - Profile Settings - - Toggle Visibility of - - Country - - Birthday - - Experience - - Bio - - Set Profile Comment + - Mii Profile Pictures + - Following/Unfollowing + - Display Verified + - Display Followers and Following + - Display Country and Game Experience + - Posts + - Profile Settings + - Toggle Visibility of + - Country + - Birthday + - Experience + - Bio + - Set Profile Comment - Activity Feed - - Posts from Followed Users + - Posts from Followed Users - Notifications - - New Follower - - New Reply to Post - + - New Follower + - New Reply to Post --- #### 3DS + - Communities - - View All Communities - - Following/Unfollowing - - Showing Posts - - Sorting Posts by Type - - Creating New Post + - View All Communities + - Following/Unfollowing + - Showing Posts + - Sorting Posts by Type + - Creating New Post - Posts - - Yeah! - - Replies - - Spoilers + - Yeah! + - Replies + - Spoilers + - Text + - Drawing + - Screenshots + - New Post + - Emotion - Text - Drawing - - Screenshots - - New Post - - Emotion - - Text - - Drawing - Users - - Mii Profile Pictures - - Display Verified + - Mii Profile Pictures + - Display Verified - Activity Feed - - Posts from Followed Users + - Posts from Followed Users - Notifications - - New Follower - - New Reply to Post - + - New Follower + - New Reply to Post --- #### API + - /v1/endpoint - - The endpoint that tells the console where to connect to for what, including bans and server maintenance + - The endpoint that tells the console where to connect to for what, including bans and server maintenance - /v1/communities/0/posts - - In game posts for games like Splatoon, Animal Crossing Plaza, and Nintendo Land + - In game posts for games like Splatoon, Animal Crossing Plaza, and Nintendo Land - /v1/topics - - The endpoint used for Wara Wara Plaza on the Wii U System Menu + - The endpoint used for Wara Wara Plaza on the Wii U System Menu ## What's still being worked on? @@ -153,7 +157,7 @@ Great question! there is still quite a bit that's being worked on for both the 3 - Desktop/Mobile Website - More Translations - More API Endpoints -- ***So Many Bug Fixes*** +- **_So Many Bug Fixes_** And more! @@ -166,58 +170,77 @@ Thank you, guys, so much for your patience and support. We can't wait to get Jux In the meantime, check out our [Patreon](https://patreon.com/pretendonetwork) to get instant access to the Juxt alpha on the Wii U! ## Wii U Screenshots + ![](https://i.imgur.com/KTwlLwh.png) + > Landing Page ![](https://i.imgur.com/QLIFy0h.png) + > All Communities and Search ![](https://i.imgur.com/lJL6TYm.png) -> Community Page + +> Community Page ![](https://i.imgur.com/W2EocVH.png) + > New Post/Reply Page ![](https://i.imgur.com/hQUtyoX.png) + > Activity Feed with Spoiler Post ![](https://i.imgur.com/Ys6KUjm.png) + > Drawing Post with Reply ![](https://i.imgur.com/HK1lXp5.png) + > Another User's Page ![](https://cdn.discordapp.com/attachments/868275684630470697/892939794345246720/unknown.png) + > Showing Users Following List ![](https://cdn.discordapp.com/attachments/868275684630470697/892940579149844510/unknown.png) + > User Settings Screen ![](https://cdn.discordapp.com/attachments/868275684630470697/892940868674265098/unknown.png) + > Notifications Screen ## 3DS Screenshots ![](https://cdn.discordapp.com/attachments/868275684630470697/892941422930558986/unknown.png) + > Landing Page ![](https://cdn.discordapp.com/attachments/868275684630470697/892941904088539156/unknown.png) + > All Communities and Search ![](https://cdn.discordapp.com/attachments/868275684630470697/892942081935413268/unknown.png) -> Community Page + +> Community Page ![](https://cdn.discordapp.com/attachments/868275684630470697/892942228954161163/unknown.png) + > New Post/Reply Page ![](https://cdn.discordapp.com/attachments/868275684630470697/892942546085511188/unknown.png) + > Activity Feed with Spoiler Post ![](https://cdn.discordapp.com/attachments/868275684630470697/892943312380645386/unknown.png) + > Drawing Post with Reply ![](https://cdn.discordapp.com/attachments/868275684630470697/892943575560638534/unknown.png) + > User Menu Screen ![](https://cdn.discordapp.com/attachments/868275684630470697/892943834521161788/unknown.png) + > Notifications Screen diff --git a/docs/common/error-page-template.md b/docs/common/error-page-template.md new file mode 100644 index 0000000..7928162 --- /dev/null +++ b/docs/common/error-page-template.md @@ -0,0 +1,25 @@ +# Error Code: {module}-{code} + +**Applies to:** {system} + +**Module:** {module_name} - {module_description} + +--- + +## Message + +> {message} + +## Cause + +{description} + +## Solution + +{solution} + +--- + +If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. + +If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://discord.gg/pretendo). diff --git a/docs/common/errorList.json b/docs/common/errorList.json deleted file mode 100644 index d20ba88..0000000 --- a/docs/common/errorList.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "juxt": [ - "JXT-598-0009", - "JXT-598-0010", - "JXT-598-0011", - "JXT-598-0020", - "JXT-598-0069", - "SYS-015-2004", - "SYS-015-5001", - "SYS-015-5002", - "SYS-015-5003", - "SYS-015-5004", - "SYS-015-5005", - "SYS-015-5006", - "SYS-015-5007", - "SYS-015-5015", - "SYS-102-2482", - "SYS-115-2004", - "SYS-115-5001", - "SYS-115-5002", - "SYS-115-5003", - "SYS-115-5004", - "SYS-115-5005", - "SYS-115-5006", - "SYS-115-5007", - "SYS-115-5015" - ], - "martini": [ - "MRTI-678-1001", - "MRTI-678-1002", - "MRTI-678-1003", - "MRTI-678-1004", - "MRTI-678-1005", - "MRTI-678-1006", - "MRTI-678-1007", - "MRTI-678-1008", - "MRTI-678-1009", - "MRTI-678-1010", - "MRTI-678-1011", - "MRTI-678-1013" - ] -} diff --git a/docs/en_US/errors/JXT-598-0009.md b/docs/en_US/errors/JXT-598-0009.md deleted file mode 100644 index 3821e7a..0000000 --- a/docs/en_US/errors/JXT-598-0009.md +++ /dev/null @@ -1,16 +0,0 @@ -# Error Code: 598-0009 -**Applies to:** Wii U, 3DS Family of Systems - ---- - -Your Pretendo Network ID has been limited from posting on Juxt. - -This typically occurs because of a violation of the Juxt Code of Conduct, or other offense on the Network or the Discord server. - -For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/JXT-598-0010.md b/docs/en_US/errors/JXT-598-0010.md deleted file mode 100644 index 7d3455e..0000000 --- a/docs/en_US/errors/JXT-598-0010.md +++ /dev/null @@ -1,16 +0,0 @@ -# Error Code: 598-0010 -**Applies to:** Wii U, 3DS Family of Systems - ---- - -Your Pretendo Network ID has been temporarily banned from Juxt. - -This typically occurs because of a violation of the Juxt Code of Conduct, or other offense on the Network or the Discord server. - -For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/JXT-598-0011.md b/docs/en_US/errors/JXT-598-0011.md deleted file mode 100644 index 30382a9..0000000 --- a/docs/en_US/errors/JXT-598-0011.md +++ /dev/null @@ -1,16 +0,0 @@ -# Error Code: 598-0011 -**Applies to:** Wii U, 3DS Family of Systems - ---- - -Your Pretendo Network ID has been permanently banned from Juxt. - -This typically occurs because of a violation of the Juxt Code of Conduct, or other offense on the Network or the Discord server. - -For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/JXT-598-0020.md b/docs/en_US/errors/JXT-598-0020.md deleted file mode 100644 index cffffd4..0000000 --- a/docs/en_US/errors/JXT-598-0020.md +++ /dev/null @@ -1,16 +0,0 @@ -# Error Code: 598-0020 -**Applies to:** Wii U, 3DS Family of Systems - ---- - -- "Unable to parse service Token. Are you using a Nintendo Network ID?" - -This typically occurs because you are attempting to connect to Juxt with a **Nintendo Network ID** instead of a **Pretendo Network ID**. - -Please ensure that the account you are using is indeed the one created for the Pretendo Network, and that you have either selected Pretendo in the 3DS Patch `nimbus.3dsx`, or have launched your Wii U with the `30_nimble.rpx` module. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/JXT-598-0069.md b/docs/en_US/errors/JXT-598-0069.md deleted file mode 100644 index 65a02e4..0000000 --- a/docs/en_US/errors/JXT-598-0069.md +++ /dev/null @@ -1,34 +0,0 @@ -# Error Code: 598-0069 -**Applies to:** Wii U - ---- - -You have the legacy Martini patches installed into your Miiverse applet. The current version of the Pretendo patchers have a safer version of these patches, so the older ones must be uninstalled. - -Navigate to the [releases](https://github.com/PretendoNetwork/Martini/releases) page on the Martini GitHub repository - - - -Select the `martini-juxt-patcher.rpx` to download it - - - -Copy `martini-juxt-patcher.rpx` and place it on your SD card at `sd:/wiiu/apps/` - - - -Place your SD card back into your console and boot like normal. - -Open the Homebrew Launcher and launch `martini-juxt-patcher.rpx` or select it from the Wii U Menu (Aroma) - - - -After confirming the state of the Miiverse applet, press X to remove the patches. - - - -Once the patcher is done running and your console has rebooted, you're done! Have fun in Juxt! - - - -If you encountered any errors, try [searching](/docs/search) for the error code. If that doesn't work, get in touch with a developer in our [Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1001.md b/docs/en_US/errors/MRTI-678-1001.md deleted file mode 100644 index fa73b2e..0000000 --- a/docs/en_US/errors/MRTI-678-1001.md +++ /dev/null @@ -1,12 +0,0 @@ -# Error Code: 678-1001 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The console's CFW is not compatible with Pretendo's patcher. If you are using Haxchi, Coldboot Haxchi, Indexiine, -Browserhax or similar, please [upgrade to Tiramisu or Aroma](https://wiiu.hacks.guide) and try again. - -If you're sure you're using Tiramisu or Aroma, reboot the console and try again. If the same error occurs, get in touch -with a developer in our [Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1002.md b/docs/en_US/errors/MRTI-678-1002.md deleted file mode 100644 index aeb63f3..0000000 --- a/docs/en_US/errors/MRTI-678-1002.md +++ /dev/null @@ -1,10 +0,0 @@ -# Error Code: 678-1002 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher could not find a Miiverse applet installed on your console, or you have several Miiverses installed. If this -is the case, get in touch with a developer in our [Discord](https://invite.gg/pretendo) - we'd love to know what kind -of devkit you have! diff --git a/docs/en_US/errors/MRTI-678-1003.md b/docs/en_US/errors/MRTI-678-1003.md deleted file mode 100644 index c0aca29..0000000 --- a/docs/en_US/errors/MRTI-678-1003.md +++ /dev/null @@ -1,12 +0,0 @@ -# Error Code: 678-1003 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The console's CFW is not compatible with Pretendo's patcher. If you are using Haxchi, Coldboot Haxchi, Indexiine, -Browserhax or similar, please [upgrade to Tiramisu or Aroma](https://wiiu.hacks.guide) and try again. - -If you're sure you're using Tiramisu or Aroma, reboot the console and try again. If the same error occurs, get in touch -with a developer in our [Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1004.md b/docs/en_US/errors/MRTI-678-1004.md deleted file mode 100644 index 6d7ae53..0000000 --- a/docs/en_US/errors/MRTI-678-1004.md +++ /dev/null @@ -1,13 +0,0 @@ -# Error Code: 678-1004 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The console's CFW is not compatible with Pretendo's patcher. Try rebooting the console. If you are using Haxchi, -Coldboot Haxchi, Indexiine, Browserhax or similar, please [upgrade to Tiramisu or Aroma](https://wiiu.hacks.guide) and -try again. - -If you're sure you're using Tiramisu or Aroma and rebooting didn't fix it, get in touch with a developer in our -[Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1005.md b/docs/en_US/errors/MRTI-678-1005.md deleted file mode 100644 index 3a8cdd9..0000000 --- a/docs/en_US/errors/MRTI-678-1005.md +++ /dev/null @@ -1,24 +0,0 @@ -# Error Code: 678-1005 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher could not find an unmodified copy of the Miiverse applet. Either you have manually modified it, it has -become corrupted, or you have a version too old or too new for the patcher to recognise. - -- If you are on a system version older than 5.1.0, perform a system update, install - [Tiramisu or Aroma](https://wiiu.hacks.guide), and try again. -- Try disabling any content replacement plugins (SDCafiine etc.) that can change which files are read by the patcher. -- If you have manually modified your Miiverse applet, reinstall a clean copy from a backup. Instructions for this - cannot be provided by Pretendo. - -If all of these failed, get in touch on our [Discord](https://invite.gg/pretendo). - ---- - -Compatible Miiverse applet versions: - - `000500301001600A v113` (JPN 5.1.0 - 5.5.6) - - `000500301001610A v113` (USA 5.1.0 - 5.5.6) - - `000500301001620A v113` (EUR 5.1.0 - 5.5.6) diff --git a/docs/en_US/errors/MRTI-678-1006.md b/docs/en_US/errors/MRTI-678-1006.md deleted file mode 100644 index fcf0c53..0000000 --- a/docs/en_US/errors/MRTI-678-1006.md +++ /dev/null @@ -1,26 +0,0 @@ -# Error Code: 678-1006 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher could not find an unmodified copy of the Thwate Premium SSL certificate. Either you have manually replaced -your SSL certificates, they have become corrupted, or your system version is too old or too new for the patcher to -recognise. - -- If you are on a system version older than 5.5.3, perform a system update, install - [Tiramisu or Aroma](https://wiiu.hacks.guide), and try again. -- Try disabling any content replacement plugins (SDCafiine etc.) that can change which files are read by the patcher. -- If you have manually modified your SSL certificates - such as when using a proxy - reinstall a clean copy from a - backup. Instructions for this cannot be provided by Pretendo. - -If all of these failed, get in touch on our [Discord](https://invite.gg/pretendo). - ---- - -Compatible SSL certificate versions: -- `0005001B10054000 v32` (ALL 5.5.3 - 5.5.6) - -`v20` (ALL 5.0.0 - 5.5.2) may also be compatible, but this is unconfirmed. Let us know on -[Discord](https://invite.gg/pretendo) if it works for you. diff --git a/docs/en_US/errors/MRTI-678-1007.md b/docs/en_US/errors/MRTI-678-1007.md deleted file mode 100644 index e605576..0000000 --- a/docs/en_US/errors/MRTI-678-1007.md +++ /dev/null @@ -1,14 +0,0 @@ -# Error Code: 678-1007 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher failed to write out a backup of your Miiverse applet to NAND. This can be caused by an incompatible CFW or -corrupted NAND. - -Try updating to the [latest Tiramisu](https://tiramisu.foryour.cafe) or -[latest Aroma](https://aroma.foryour.cafe) build, as these often contain fixes to the CFW. - -If the issue persists, get in touch in our [Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1008.md b/docs/en_US/errors/MRTI-678-1008.md deleted file mode 100644 index ed751b2..0000000 --- a/docs/en_US/errors/MRTI-678-1008.md +++ /dev/null @@ -1,11 +0,0 @@ -# Error Code: 678-1008 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher failed to create a patched version of a file. The original file has not been modified. - -Reboot your console and try again. If the issue persists, this is most likely a bug in the Martini patcher - please get -in touch with a developer on our [Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1009.md b/docs/en_US/errors/MRTI-678-1009.md deleted file mode 100644 index c56a2a0..0000000 --- a/docs/en_US/errors/MRTI-678-1009.md +++ /dev/null @@ -1,11 +0,0 @@ -# Error Code: 678-1009 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher failed to create a patched version of a file. The original file has not been modified. - -Reboot your console and try again. If the issue persists, this is most likely a bug in the Martini patcher - please get -in touch with a developer on our [Discord](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/MRTI-678-1010.md b/docs/en_US/errors/MRTI-678-1010.md deleted file mode 100644 index 3a0c9cd..0000000 --- a/docs/en_US/errors/MRTI-678-1010.md +++ /dev/null @@ -1,23 +0,0 @@ -# Error Code: 678-1010 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - - - -The patcher encountered an error when applying the patched files to your system. Files on your NAND have been modified -and your system is in an unknown state, though there should be no risk of bricking. - -
-⚠️ Do not reboot your console, return to the Wii U Menu or open the Miiverse applet. If you're uncomfortable -diagnosing the issue yourself, reach out on our Discord. -
- -If you know what `udplogserver` is, start it now and save the output. Press HOME to exit the Martini patcher, then -immediately open it again. If you see an error code, view its [documentation page](/docs/search), but remember not to -reboot your console until the system is in a known state again. If, instead, you progress to the confirmation page, and -you have the option to uninstall patches by pressing X, you may do so. If you are not given the option to uninstall any -patches, reach out on our [Discord](https://invite.gg/pretendo), and include a photo of the confirmation screen. diff --git a/docs/en_US/errors/MRTI-678-1011.md b/docs/en_US/errors/MRTI-678-1011.md deleted file mode 100644 index f39a02b..0000000 --- a/docs/en_US/errors/MRTI-678-1011.md +++ /dev/null @@ -1,24 +0,0 @@ -# Error Code: 678-1011 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -
-⚠️ Do not reboot your console or exit Martini! -
- -The patcher encountered an error when applying the patched certificate to your system. Files essential to your Wii U's -functionality have been modified and the system may be unbootable. **Immediate action is required to avoid a brick.** - -Reach out on our [Discord](https://invite.gg/pretendo). State your error code and that you have a cert brick. Be -loud and ping mods - this is the only time you're allowed ;) - ---- - -Precise instructions are not provided here to ensure that you get helpers involved. For helpers and experienced users, -however, your best bet from here is to use wupclient (Tiramisu/Aroma) or FTP (Aroma) to download whatever Thwate cert is -on the console and inspect it, then upload a clean one. Users who have EnvironmentLoader in H&S can install Tiramisu and -should be able to use the boot selector to get to HBL and FTPiiU Everywhere without triggering the brick. Users without -a working coldboot setup are SOL if they reboot, though UDPIH might be able to save it. diff --git a/docs/en_US/errors/MRTI-678-1013.md b/docs/en_US/errors/MRTI-678-1013.md deleted file mode 100644 index 1e8b38e..0000000 --- a/docs/en_US/errors/MRTI-678-1013.md +++ /dev/null @@ -1,12 +0,0 @@ -# Error Code: 678-1013 -**Applies to:** Wii U - ---- - -***Note:*** This error relates to the Martini patches, which are now deprecated. - -The patcher failed to restore a file from its backup. The patched file remains in place. - -Reboot your console and try again. If the issue persists, this is most likely a bug in the Martini patcher - please get -in touch with a developer on our [Discord](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-015-2004.md b/docs/en_US/errors/SYS-015-2004.md deleted file mode 100644 index 4d83691..0000000 --- a/docs/en_US/errors/SYS-015-2004.md +++ /dev/null @@ -1,22 +0,0 @@ -# Error Code: 015-2004 -**Applies to:** 3DS Family of Systems - ---- - -- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com." - -This error indicates a connection problem with the server. - -### Possible Solutions - -- **Check our network status information** -> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages. - -- **Ensure your Wii U can connect to the internet and try again** -> Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-015-5001.md b/docs/en_US/errors/SYS-015-5001.md deleted file mode 100644 index 88b5d89..0000000 --- a/docs/en_US/errors/SYS-015-5001.md +++ /dev/null @@ -1,24 +0,0 @@ -# Error Code: 015-5001 -**Applies to:** 3DS Family of Systems - ---- - -- "A system update is required. Go to System Settings to perform a system update." - -This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot. - -### Possible Solutions - -- **Check that you are patched** - 1. Open System Settings on the 3DS HOME Menu - 2. Click on `Nintendo Network ID Settings` - 3. Navigate to the 3RD Page, and select `Other` - 4. Click on `Network Services Agreement` - - If the top of the lower screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network. - - If the top of the lower screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install/3ds) instructions to get started. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-015-5002.md b/docs/en_US/errors/SYS-015-5002.md deleted file mode 100644 index 99d5174..0000000 --- a/docs/en_US/errors/SYS-015-5002.md +++ /dev/null @@ -1,15 +0,0 @@ -# Error Code: 115-5002 -**Applies to:** 3DS Family of Systems - ---- - -- "You must have started Miiverse at least once before you can use this online service. Please Start Miiverse from the 3DS HOME Menu and set up your user information." - - -This error occurs when you have never opened the Miiverse app before attempting to use online features. Open the Miiverse app from the HOME Menu to get started. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-015-5003.md b/docs/en_US/errors/SYS-015-5003.md deleted file mode 100644 index 06d702a..0000000 --- a/docs/en_US/errors/SYS-015-5003.md +++ /dev/null @@ -1,15 +0,0 @@ -# Error Code: 015-5003 -**Applies to:** 3DS Family of Systems - ---- - -- "The server is currently undergoing maintenance. Please Try again later." - -Juxtaposition is currently undergoing maintenance. Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) or join our [Discord server](https://invite.gg/pretendo) for updates. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-015-5004.md b/docs/en_US/errors/SYS-015-5004.md deleted file mode 100644 index 43ffe46..0000000 --- a/docs/en_US/errors/SYS-015-5004.md +++ /dev/null @@ -1,24 +0,0 @@ -# Error Code: 015-5004 -**Applies to:** 3DS Family of Systems - ---- - -- "The Miiverse service has ended. Miiverse and any software features that make use of Miiverse will no longer be available. Thank you for your Interest." - -This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot. - -### Possible Solutions - -- **Check that you are patched** - 1. Open System Settings on the 3DS HOME Menu - 2. Click on `Nintendo Network ID Settings` - 3. Navigate to the 3RD Page, and select `Other` - 4. Click on `Network Services Agreement` - - If the top of the lower screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network. - - If the top of the lower screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install/3ds) instructions to get started. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-015-5005.md b/docs/en_US/errors/SYS-015-5005.md deleted file mode 100644 index a7ff481..0000000 --- a/docs/en_US/errors/SYS-015-5005.md +++ /dev/null @@ -1,37 +0,0 @@ -# Error Code: 015-5005 -**Applies to:** 3DS Family of Systems - ---- - -- "You cannot use Miiverse because it has been restricted in Parental Controls." - -This error occurs when Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable Miiverse. - -### Steps to Remove Miiverse Parental Control Limits - 1. On the 3DS HOME Menu, open the `System Settings` app. - -

- 2. Click on `Parental Controls` on the bottom screen. - -

- 3. Click on `Change` and enter your pin. - -

- 4. Click on `Set Restrictions`. - -

- 5. Scroll down to the `Miiverse` button. - -

- 6. Click the `Miiverse` button, and then select `Do Not Restrict`. - -

- - Parental Controls should now be disabled for Miiverse. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-015-5006.md b/docs/en_US/errors/SYS-015-5006.md deleted file mode 100644 index 1e4264b..0000000 --- a/docs/en_US/errors/SYS-015-5006.md +++ /dev/null @@ -1,37 +0,0 @@ -# Error Code: 015-5005 -**Applies to:** 3DS Family of Systems - ---- - -- "You may not post to Miiverse due to a restriction in Parental Controls" - -This error occurs when posting to Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable posting. - -### Steps to Remove Miiverse Parental Control Limits - 1. On the 3DS HOME Menu, open the `System Settings` app. - -

- 2. Click on `Parental Controls` on the bottom screen. - -

- 3. Click on `Change` and enter your pin. - -

- 4. Click on `Set Restrictions`. - -

- 5. Scroll down to the `Miiverse` button. - -

- 6. Click the `Miiverse` button, and then select `Do Not Restrict`. - -

- -Parental Controls should now be disabled for Miiverse. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-015-5007.md b/docs/en_US/errors/SYS-015-5007.md deleted file mode 100644 index 633dc14..0000000 --- a/docs/en_US/errors/SYS-015-5007.md +++ /dev/null @@ -1,18 +0,0 @@ -# Error Code: 015-5007 -**Applies to:** 3DS Family of Systems - ---- - -- ""Miiverse function are unavailable to this Nintendo Network ID. For details, please start Miiverse." - -This typically occurs because you are attempting to connect to Juxt with a **Nintendo Network ID** instead of a **Pretendo Network ID**. - -This can also occur if your Pretendo Network ID has been banned from using Juxt. - -For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-015-5015.md b/docs/en_US/errors/SYS-015-5015.md deleted file mode 100644 index ef011f4..0000000 --- a/docs/en_US/errors/SYS-015-5015.md +++ /dev/null @@ -1,23 +0,0 @@ -# Error Code: 015-5015 -**Applies to:** 3DS Family of Systems - ---- - -- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com." - -This error indicates a connection problem with the server. - -### Possible Solutions - -- **Check our network status information** -> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages. - -- **Ensure your 3DS can connect to the internet and try again** -> Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network - - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-102-2482.md b/docs/en_US/errors/SYS-102-2482.md deleted file mode 100644 index 9419607..0000000 --- a/docs/en_US/errors/SYS-102-2482.md +++ /dev/null @@ -1,31 +0,0 @@ -# Error Code: 102-2482 -**Applies to:** Wii U - ---- - -- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com." - -This error indicates one of the following: -1. The server you're connecting to is offline for maintenance. -2. Pretendo does not yet support the game or application in question. -3. The game or application's server is still in development and isn't available to your account yet. For example, beta - servers are generally only available to [supporters](https://pretendo.network/account/upgrade). - -### Possible Solutions - -- **Check our network status information** -> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages. - -- **Check Pretendo has a server for your game** -> Check our [Progress page](https://pretendo.network/progress) to see if a server exists and is in development. We don't -> support everything yet! - -- **Upgrade your account** -> Certain beta and development servers are available to supporters for beta-testing. If you'd like to help test these -> ahead of a public release, [consider supporting Pretendo](https://pretendo.network/account/upgrade). - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-115-2004.md b/docs/en_US/errors/SYS-115-2004.md deleted file mode 100644 index 489d166..0000000 --- a/docs/en_US/errors/SYS-115-2004.md +++ /dev/null @@ -1,22 +0,0 @@ -# Error Code: 115-2004 -**Applies to:** Wii U - ---- - -- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com." - -This error indicates a connection problem with the server. - -### Possible Solutions - -- **Check our network status information** -> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages. - -- **Ensure your Wii U can connect to the internet and try again** -> Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-115-5001.md b/docs/en_US/errors/SYS-115-5001.md deleted file mode 100644 index 6660896..0000000 --- a/docs/en_US/errors/SYS-115-5001.md +++ /dev/null @@ -1,27 +0,0 @@ -# Error Code: 115-5001 -**Applies to:** Wii U - ---- - -- "A system update is required. Go to System Settings to perform a system update." - -This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot. - -### Possible Solutions - -- **Check that you are patched** - 1. On the Wii U System Menu, click on your Mii in the top left corner. - 2. Scroll down and select `View Network Services Agreement` button. - 3. Select the language of your choice. - - If the top of the screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network. - - If the top of the screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install/wiiu) instructions to get started. - -- **Update your console** - - As of now, version 5.5.6 is safe to update for homebrew. - - By default, modern homebrew environments block updates to ensure patches are not broken. You can follow [this](https://wiiu.hacks.guide/#/unblock-updates) guide to unblock updates. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-115-5002.md b/docs/en_US/errors/SYS-115-5002.md deleted file mode 100644 index 09f5e1c..0000000 --- a/docs/en_US/errors/SYS-115-5002.md +++ /dev/null @@ -1,14 +0,0 @@ -# Error Code: 115-5002 -**Applies to:** Wii U - ---- - -- "You must have started Miiverse at least once before you can use this online service. Please Start Miiverse from the HOME Menu and set up your user information." - -This error occurs when you have never opened the Miiverse app before attempting to use online features. Open the Miiverse app from the HOME Menu to get started. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-115-5003.md b/docs/en_US/errors/SYS-115-5003.md deleted file mode 100644 index ff58ac8..0000000 --- a/docs/en_US/errors/SYS-115-5003.md +++ /dev/null @@ -1,15 +0,0 @@ -# Error Code: 115-5003 -**Applies to:** Wii U - ---- - -- "The server is currently undergoing maintenance. Please Try again later." - -Juxtaposition is currently undergoing maintenance. Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) or join our [Discord server](https://invite.gg/pretendo) for updates. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-115-5004.md b/docs/en_US/errors/SYS-115-5004.md deleted file mode 100644 index a1281fe..0000000 --- a/docs/en_US/errors/SYS-115-5004.md +++ /dev/null @@ -1,24 +0,0 @@ -# Error Code: 115-5004 -**Applies to:** Wii U - ---- - -- "The Miiverse service has ended. Miiverse and any software features that make use of Miiverse will no longer be available. Thank you for your Interest." - -This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot. - -### Possible Solutions - -- **Check that you are patched** - 1. On the Wii U System Menu, click on your Mii in the top left corner. - 2. Scroll down and select `View Network Services Agreement` button. - 3. Select the language of your choice. - - If the top of the screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network. - - If the top of the screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install) instructions to get started. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-115-5005.md b/docs/en_US/errors/SYS-115-5005.md deleted file mode 100644 index 7436dbc..0000000 --- a/docs/en_US/errors/SYS-115-5005.md +++ /dev/null @@ -1,31 +0,0 @@ -# Error Code: 115-5005 -**Applies to:** Wii U - ---- - - -- "You cannot use Miiverse because it has been restricted in Parental Controls." - - -This error occurs when Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable Miiverse. - -### Steps to Remove Miiverse Parental Control Limits - 1. On the Wii U System Menu, open the `Parental Controls` app -

- 2. Click `Next` on the Wii U Gamepad, and enter your pin. -

- 3. Click on `Parental Controls Settings` -

- 4. Find the user account you wish to change, and then scroll down to the `Miiverse` button. -

- 5. Click the `Miiverse` button, and then select `Do Not Restrict`. -

- -Parental Controls should now be disabled for Miiverse. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-115-5006.md b/docs/en_US/errors/SYS-115-5006.md deleted file mode 100644 index dac8c20..0000000 --- a/docs/en_US/errors/SYS-115-5006.md +++ /dev/null @@ -1,31 +0,0 @@ -# Error Code: 115-5006 -**Applies to:** Wii U - ---- - - -- "You may not post to Miiverse due to a restriction in Parental Controls" - - -This error occurs when posting to Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable posting. - -### Steps to Remove Miiverse Parental Control Limits - 1. On the Wii U System Menu, open the `Parental Controls` app -

- 2. Click `Next` on the Wii U Gamepad, and enter your pin. -

- 3. Click on `Parental Controls Settings` -

- 4. Find the user account you wish to change, and then scroll down to the `Miiverse` button. -

- 5. Click the `Miiverse` button, and then select `Do Not Restrict`. -

- -Parental Controls should now be disabled for Miiverse. - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - diff --git a/docs/en_US/errors/SYS-115-5007.md b/docs/en_US/errors/SYS-115-5007.md deleted file mode 100644 index 7d990ed..0000000 --- a/docs/en_US/errors/SYS-115-5007.md +++ /dev/null @@ -1,18 +0,0 @@ -# Error Code: 115-5007 -**Applies to:** Wii U - ---- - -- ""Miiverse function are unavailable to this Nintendo Network ID. For details, please start Miiverse." - -This typically occurs because you are attempting to connect to Juxt with a **Nintendo Network ID** instead of a **Pretendo Network ID**. - -This can also occur if your Pretendo Network ID has been banned from using Juxt. - -For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/errors/SYS-115-5015.md b/docs/en_US/errors/SYS-115-5015.md deleted file mode 100644 index 98b83e2..0000000 --- a/docs/en_US/errors/SYS-115-5015.md +++ /dev/null @@ -1,23 +0,0 @@ -# Error Code: 115-5015 -**Applies to:** Wii U - ---- - -- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com." - -This error indicates a connection problem with the server. - -### Possible Solutions - -- **Check our network status information** - - Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages. - -- **Ensure your Wii U can connect to the internet and try again** -- Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network - - ---- - -If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started. - -If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo). diff --git a/docs/en_US/install/3ds.md b/docs/en_US/install/3ds.md index a34f433..d386070 100644 --- a/docs/en_US/install/3ds.md +++ b/docs/en_US/install/3ds.md @@ -1,15 +1,26 @@ # 3DS/2DS Family +
+ CAUTION: + DON'T REMOVE YOUR NNID TO SET UP PRETENDO NETWORK, IT'S NOT NECESSARY AND BY DOING SO YOU WILL LOSE BADGES, REDOWNLOADABLE GAMES, THEMES AND POKÉMON BANK DATA! +
+
CAUTION: SYSTEM TRANSFERS ARE NOT CURRENTLY SUPPORTED BY OUR SERVERS. ATTEMPTING TO PERFORM A SYSTEM TRANSFER MAY PREVENT YOU FROM BEING ABLE TO GO ONLINE IN THE FUTURE. SUPPORT FOR SYSTEM TRANSFERS IS IN DEVELOPMENT.
+
+ CAUTION: + Collecting badges in Nintendo Badge Arcade while connected to one network and then launching the game on a different network will result in your badges disappearing. This occurs because the locally saved data does not match the data stored on the server. +
+
ℹ️ This guide assumes that you have a Homebrewed System running the latest version of Luma3DS (13+), if you don't please follow this guide on how to homebrew your system first.
The following steps are required for you to connect to the Pretendo Network: + 1. [Downloading Nimbus](#downloading-nimbus) 2. [Enabling Luma patches](#luma-patches) 3. [Nimbus](#using-nimbus) @@ -29,7 +40,7 @@ Once inserted, download the latest [Nimbus release](https://github.com/PretendoN Nimbus is available as both a 3DSX app and an installable CIA. The releases page offers downloads for both. Select the version you would like to use, or select the `combined.[version].zip` archive to use both. - +Screenshot of a GitHub release page with the file combined.[version].zip highlighted Extract the contents of the zip archive to the root of your SD card. If you are asked to merge or overwrite files, accept the changes. @@ -87,18 +98,47 @@ Your selection persists between reboots. The 3DS does not rely on NNIDs for the vast majority of it's game servers. Because of this, using a PNID is also not required for most games[[1]](#footnote-1). -Setting up a PNID on the 3DS is the same as setting up a NNID. You may either create the PNID on your console, or register from an account [on our website](/account/register) and link it to your console at a later date +Setting up a PNID on the 3DS is the same as setting up a NNID. You may either create the PNID on your console, or register from an account [on our website](/account/register) and link it to your console once you're ready. -It is recommended to register the PNID on your device at this time, as registering on the website does not currently allow you to change your user data +It is recommended to register the PNID on your device at this time, as registering on the website does not currently allow you to change your user data. + +
+ CAUTION: + A Pretendo Network ID may not use the same username as the account already linked to your 3DS! Ensure that you have chosen a different name for your PNID than the name on your NNID. +
## Other information ### How does Nimbus work? + Nimbus will create a 2nd local account set to the `test` NASC environment. The IPS patches will set the `test` NASC environment URLs to point to Pretendo. You may freely switch between Pretendo and Nintendo. Your selected mode will persist between reboots. ### 2nd local account? + You may have thought to yourself; _"2nd local account? What's that? I thought the 3DS only had one account?"_ And you'd be half right. The 3DS only _normally_ supports one account, and you may only have one account active at a time. However Nintendo implemented support for multiple local accounts on the 3DS/2DS which remains unused on all retail units. On a normal retail unit only one local account is ever made, which is set to the `prod` NASC environment. Local accounts may be set to `prod`, `test` or `dev`. Nimbus makes use of this unused feature to create sandboxed local accounts with different environments + +### Restoring Nintendo Badge Arcade Badges + +1. Insert your SD Card into your PC. +2. Back up your badges at the folder on your SD Card `SD:Nintendo 3DS/ID0/ID1/extdata/00000000/000014d1`. +3. Download [Simple Badge Injector](https://github.com/AntiMach/simple-badge-injector/releases/latest). +4. Insert your SD Card into your console. +5. Use Nimbus to switch to Pretendo. +6. Open Simple Badge Injector and make a note of the "Nintendo Network ID" value. +7. Still inside SBI, choose the option to dump your badge data files. +8. Turn off your 3DS and remove the SD card. Insert your SD card into your PC. +9. Download and open [Advanced Badge Editor](https://github.com/AntiMach/advanced-badge-editor/releases/latest). +10. Go to `File > Open Data`, then choose the folder where BadgeData.dat and BadgeMngFile.dat are. (Located at `sd:/3ds/SimpleBadgeInjector/Dumped`) +11. Replace the NNID value with the one you made a note of in SBI earlier. +12. Select `Save As` to save the modified file separately from the backup. +13. Put your modified badge data filed into `sd:/3ds/SimpleBadgeInjector` +14. Put your SD card back into your 3DS and go back into SBI +15. Inject your modified badge data files. + +All badges _placed_ on the home menu will be deleted, and you have to re-add them in the order you have had them before. + +If you encounter any errors, restore your backed up badge data through SBI. Injecting badges while using Pretendo Network will make them disappear when swapping back to Nintendo Network, and vice versa. diff --git a/docs/en_US/install/cemu.md b/docs/en_US/install/cemu.md index b10839f..ea017dc 100644 --- a/docs/en_US/install/cemu.md +++ b/docs/en_US/install/cemu.md @@ -2,7 +2,12 @@ # Cemu +
+ In Order to use Pretendo on Cemu, you need to have Pretendo already installed on your Wii U. For Wii U please follow the Wii U Guide +
+ ## Download +
Note: Only experimental builds of Cemu 2.0 are supported. At this time Cemu does not have a stable release of Cemu 2.0 which supports Pretendo @@ -10,12 +15,16 @@ Cemu 2.0 has official built-in support for Pretendo as of October 10, 2022. Head to the Cemu GitHub [releases](https://github.com/cemu-project/Cemu/releases) page and download the latest Cemu experimental release (tagged as `Pre-release`). Only `Cemu 2.0-5 (Experimental)` and above is supported at the moment. Additionally you may build Cemu from source using the provided [build instructions](https://github.com/cemu-project/Cemu/blob/main/BUILD.md) +## Dumping your pretendo account + Ensure you have followed [Cemu's guide](https://cemu.cfw.guide/online-play.html) to set up the emulator for online play. When dumping your user account files, ensure you select your PNID. ## Connecting to Pretendo + Once you have Cemu setup for online play navigate to `Options > General settings > Account`. You should now see a section titled `Network Service`. Select your PNID from the `Active account` menu and select the `Pretendo` Network Service option. Cemu should now be connected to Pretendo's servers -
+
Screenshot of Cemu's Account Settings with different Network Service Options.
## Miiverse + Cemu has limited to no Miiverse support as of now. Some in game features may work, but this is not guaranteed. The Miiverse applet does not work in official builds. diff --git a/docs/en_US/install/juxt.md b/docs/en_US/install/juxt.md index b226345..75981af 100644 --- a/docs/en_US/install/juxt.md +++ b/docs/en_US/install/juxt.md @@ -4,10 +4,6 @@ ℹ️ This guide assumes that you have a Homebrewed System, and have already connected to Pretendo. If you have not yet set up your Pretendo Network ID, follow this guide to get started.
-
- ℹ️ Pretendo Network is currently in a closed beta. Not all features, including game servers and Miiverse, are open to the public. -
- Juxtaposition is the Pretendo Network replacement for the now defunct Miiverse service ## Select your console @@ -24,10 +20,6 @@ Juxtaposition is the Pretendo Network replacement for the now defunct Miiverse s # 3DS -
- ⚠️ Nimbus will overwrite existing patches for services such as Rverse. As such, use with caution -
-
ℹ️ Nimbus already handles all the required patches for the Miiverse applet. If you do not have Nimbus installed, follow this guide to get started.
diff --git a/docs/en_US/install/wiiu.md b/docs/en_US/install/wiiu.md index dca0279..29bcdfd 100644 --- a/docs/en_US/install/wiiu.md +++ b/docs/en_US/install/wiiu.md @@ -1,93 +1,161 @@ # Wii U -You can connect your Wii U to Pretendo using one of 2 methods. Each method has benefits and drawbacks, which will be described in their respective sections. +
+ CAUTION: + DON'T REMOVE YOUR NNID TO SET UP PRETENDO NETWORK, IT'S NOT NECESSARY AND BY DOING SO YOU WILL LOSE ALL YOUR PREVIOUSLY PURCHASED GAMES AND WILL BE UNABLE TO UPDATE THEM! +
+You can connect your Wii U to Pretendo using one of 2 methods. Inkay is recommended unless you have some reason to avoid modding your console (e.g. you live in Japan where is is legally gray). + +- [Inkay (homebrew - recommended)](#inkay) - [SSSL (hackless)](#sssl) -- [Inkay (homebrew)](#inkay) -Once you have selected a connection method and set up your Wii U, see ["PNID Setup"](#pnid-setup). +# Inkay -If you have save data from a Nintendo Network ID you would like to move to your Pretendo Network ID, follow [this](#transferring-save-data-to-your-pretendo-network-account) section. +**Pros:** + +- All services supported +- Contains additional features and patches +- Works regardless of ISP +- Easy toggle on and off + +**Cons:** + +- Requires homebrew + +## Installation + +
+ ℹ️ This part of the guide assumes that you have a Homebrewed System using Aroma. + If you don't yet, you can follow this guide to set up homebrew on your Wii U. +
+ +Locate the `Aroma Updater` icon on your Wii U Menu and open it. + +Screenshot of Wii U Menu with the Aroma Updater icon highlighted + +On the welcome screen, press A to check for updates. + +Screenshot of white text. 'Welcome to the Aroma updater' - 'A - Check for updates' + +Wait for the update check to complete. Your screen may look slightly different to this image if newer updates have been released when you're reading this - that's okay. + +Aroma updater application displaying a list of payloads. + +Press R to move to Page 2. + +Aroma updater application displaying a list of additional plugins. + +Use the D-Pad to move the cursor down to Inkay, then press A to select it. + +Aroma updater application displaying a list of additional plugins with Inkay highlighted and selected. + +Press + to begin the installation, then press A to confirm the changes. You may have additional updates listed in addition to Inkay - that's okay. + +A confirmation dialog. Inkay will be updated or changed. + +
+ ℹ️ You may get a message stating "This version of this file is unknown!" in relation to Inkay - this means you have an old or beta version installed. + You should press A to confirm replacing it with the correct version. +
+ +Wait for the installation to complete, then press A to restart your console. + +A confirmation dialog. The console will now restart. + +Once the console restarts, you'll see a notification in the top-left informing you that Pretendo will be used. The notification disappears after a few moments. + +The Wii U user selection screen, with 'Using Pretendo Network' overlaid in the top-left + +Inkay is now installed and working. You can proceed to [PNID Setup](#pnid-setup) to create an account. # SSSL + **Pros:** + - Does not require homebrew - Very easy to setup **Cons:** + - Only a subset of services are supported - Lacks additional features and patches -- May not function under certain ISP related conditions (self-hosted DNS tool is in development) -- Requires changing network settings to disconnect +- Does not work on some ISPs +- Hard to switch on or off -SSSL is a (limited) hackless method of accessing most services by exploiting a bug in the Wii U's SSL module. All Nintendo Network games produced by Nintendo are supported by SSSL, as are the ***in-game*** Miiverse features. The main Miiverse app, in-game ***posting*** app, and any game which uses its own SSL stack (YouTube, WATCH_DOGS, etc.), are ***NOT*** supported by this method, as they are unaffected by the SSL exploit. - -To connect using SSSL, open `System Settings > Internet > Connect to the Internet`. Open the settings for your network connection and open `DNS`. Select `Don't Auto-obtain`. Enter `88.198.140.154` as the `Primary DNS`. Enter another public DNS server address as the `Secondary DNS`, such as `8.8.8.8` (Google Public DNS) or `1.1.1.1` (Cloudflare-DNS). You should now be able to setup and login to your Pretendo Network ID as normal. - -To disconnect from Pretendo Network either remove the `Primary DNS` address or change back to `Auto-obtain`. - -# Inkay -**Pros:** -- All services supported -- Contains additional features and patches -- No ISP related issues -- Easy toggle on and off - -**Cons:** -- Requires homebrew -- Requires several steps to setup - -
- ℹ️ This part of the guide assumes that you have a Homebrewed System using Aroma. - You can follow this guide on how to homebrew your system first, then install - Aroma using this guide. -
- -The stable build is recommended for most users, however beta testers and others may be interested in the bleeding edge build. - -## Stable -The stable builds have been widely tested to ensure everything works as intended. Navigate to [Inkay's latest release](https://github.com/PretendoNetwork/Inkay/releases/latest) on GitHub and download the `Inkay-pretendo.wps` file from the latest release. - - - -## Bleeding Edge -Bleeding edge builds have not been widely tested, and do not guarantee any stability. Download the latest build from nightly. Extract `inkay.zip`. - - +SSSL is a (limited) hackless method of accessing most services by exploiting a bug in the Wii U's SSL module. All Nintendo Network games produced by Nintendo are supported by SSSL, as are the **_in-game_** Miiverse features. The main Miiverse app, in-game **_posting_** app, and any game which uses its own SSL stack (YouTube, WATCH*DOGS, etc.), are \*\*\_NOT*\*\* supported by this method, as they are unaffected by the SSL exploit. ## Installation -Place the downloaded `Inkay-pretendo.wps` file on your SD card at `sd:/wiiu/environments/aroma/plugins`. It's normal for other Aroma plugins to be in this folder too. - +
+ ℹ️ System Settings, and therefore SSSL, requires a Wii U GamePad to use on unmodified systems. +
-Place your SD card back into your console and boot like normal. You should see a notification of your connection: +Locate the `System Settings` icon on your Wii U Menu and open it. - +The Wii U Menu, with the System Settings icon highlighted -You are now connected to Pretendo Network. +Open the Internet category. -## Disconnecting -Press `L + Down + SELECT` on the Wii U GamePad to open the Aroma plugin menu. +The System Settings app, with the Internet category highlighted - +Select `Connect to the Internet`. -Locate and select 'Inkay', then choose 'Patching'. Now, set 'Connect to the Pretendo Network' to **false**. +The System Settings app, with the Connect to the Internet button highlighted - +Select `Connection List` in the top-right. -Press `B` twice, followed by the `HOME` button. The console will reboot with Pretendo Network patches disabled, as confirmed by the 'Using Nintendo Network' message. +The Internet Connection Setup panel. In the top-right is a Connection List button (X) -To return to Pretendo Network, repeat the process ensuring 'Connect to the Pretendo Network' is set to **true**. +Locate the connection with a "Wii U" logo. This is the one your system will use by default. Press A to edit it. + +A list of internet connections. 'Wired Connection' is marked with a Wii U and Wii logo, and is highlighted. + +Select `Change Settings`. + +A list of options. 'Change Settings' is highlighted. + +Navigate to the right and down to the `DNS` button, and press A to edit. + +The second page of the Wii U connection editor. DNS is highlighted. + +Select `Do not auto-obtain`. We will provide our own DNS for SSSL to work. + +Two options for 'Automatically obtain DNS?' 'Do not auto-obtain' is highlighted. + +This brings up the DNS input. We will change both the Primary and Secondary DNS settings. + +Two input fields for Primary and Secondary DNS. + +For the Primary DNS, enter `88.198.140.154`. This is the SSSL server. + +'Enter the primary DNS' field, with 88.198.140.154 - the SSSL server - input. + +For the Secondary DNS, enter `9.9.9.9` (or another public DNS of your choice). This will serve as a fallback if Pretendo's SSSL server should go offline, allowing your console to still access the Internet. If Pretendo is offline and the fallback is used, however, the console will access Nintendo Network rather than Pretendo Network. If this is undesirable to you, leave this field blank. + +'Enter the secondary DNS' field, with 9.9.9.9 - a public DNS server - input. + +Review the final settings and ensure you typed them correctly. The Wii U will add leading zeroes to each number - this is okay. If they are correct, press Confirm. + + + +Press B to save the connection. You may perform a connection test and set the connection as default. Then, press B until System Settings exits. + +SSSL is now installed and working. You can proceed to [PNID Setup](#pnid-setup) to create an account. + +To disconnect from Pretendo Network (e.g. to access the Nintendo eShop) repeat this process, but select `Auto-obtain` for the DNS. # PNID Setup + After installing Pretendo, you must register a Pretendo Network ID (PNID). There is currently two ways of creating a PNID: Creating an account with the website and linking it, or creating it on your Wii U.
CAUTION: - A Pretendo Network ID may not use the same username as an account already linked to your Wii U! If you have any existing Nintendo Network IDs on your Wii U which share the username you wish to use, those accounts MUST be removed from your console first. + A Pretendo Network ID may not use the same username as an account already linked to your Wii U! Ensure that you have chosen a different name for your PNID than the name on your NNID.
### Website + You will want to register an account from [here](/account) and click `Don't have an account?` to register.
@@ -95,39 +163,94 @@ You will want to register an account from [here](/account) and click `Don't have Account settings cannot be modified at this time. Feature updates to the website have been paused as we migrate the codebase, and the account settings app on the Wii U requires additional patches.
- +Screenshot of a web form to register an account Once your account is registered, link it to your console as you would a Nintendo Network ID. +Your PNID is now set up and ready to use. You may continue reading to learn about optional extras, like Inkay's features and transferring save data, or you can stop here. + ### Wii U + Create the Pretendo Network ID as you would a Nintendo Network ID. +# Using Inkay + +If you're using Inkay rather than SSSL, there are some additional features you may find helpful. + +
+Using Nintendo Network +You might need to switch back to Nintendo Network to access the Nintendo eShop or other services. + +Press `L + Down + SELECT` on the Wii U GamePad to open the Aroma plugin menu. Use the D-pad to highlight Inkay then press A to select. + +Screenshot of Aroma plugin menu with Inkay entry highlighted + +Press A to enter the `Network Selection` area. + +Screenshot of Inkay menu with Network Selection highlighted + +Press A on `Connect to Pretendo network` to toggle it to `false`. + +Screenshot of Inkay menu with Connect to Pretendo Network set to false + +Press `B` three times to exit the Aroma plugin menu. Your console will restart. Once it does, a notification will appear showing that you are now using Nintendo Network. + +The Wii U user selection screen, with 'Using Nintendo Network' overlaid in the top-left + +You may now use your NNID to access the eShop or other Nintendo services. To return to Pretendo Network, repeat the process and set `Connect to Pretendo network` to `true`. + +
+ +
+Resetting WaraWara Plaza +If you're having issues with WaraWara Plaza (where the Miis run around on the TV), resetting it can help. + +Exit any games or software such that you're on the Wii U Menu, then press `L + Down + SELECT` on the Wii U GamePad to open the Aroma plugin menu. Use the D-pad to highlight Inkay then press A to select. + +Screenshot of Aroma plugin menu with Inkay entry highlighted + +Use the D-pad to select `Other Settings` and press A to enter it. + +Screenshot of Inkay menu with Other Settings highlighted + +Press A on `Reset Wara Wara Plaza` to perform the reset. + +Screenshot of Inkay menu with Reset Wara Wara Plaza highlighted + +The button will change to indicate the console must be restarted. + +Screenshot of Inkay menu with Reset Wara Wara Plaza highlighted. The entry now says 'Restart to apply' + +Press `B` three times to exit the Aroma plugin menu. Your console will restart. Once it does, the process is complete. + +
+ # Transferring save data to your Pretendo Network account -Pretendo Network is not compatible with existing Nintendo Network IDs. This means you must create a new account. Because of this, you may want to move existing game save data to your new account. +Pretendo Network is not compatible with existing Nintendo Network IDs. This means you must create a new account. Because of this, you may want to move existing game save data to your new account. This is optional.
Note: This only works with local save data. Any user data stored on Nintendo's servers cannot be transferred to any other accounts.
-To move your save data, you will need a save data backup homebrew application. This guide will use the WUT port of SaveMii for Aroma. To begin, download the latest [GitHub release](https://github.com/Xpl0itU/savemii/releases) of SaveMii or download it from the [Homebrew App Store](https://hb-app.store). +To move your save data, you will need a save data backup homebrew application. This guide will use the WUT port of SaveMii for Aroma. To begin, download the latest [GitHub release](https://github.com/Xpl0itU/savemii/releases) of SaveMii or download it from the [Homebrew App Store](https://hb-app.store). - +Screenshot of Homebrew App Store page of SaveMii Mod Once installed, open the application from the HOME Menu. You should see a menu for Wii U and vWii saves. - +SaveMii menu Select `Wii U Save Management`. You should now see a list of installed games. Find and select the game you would like to transfer the save data of. Select `Backup savedata`. - +SaveMii backup save data menu Select a new slot to backup the save data to. If you select a non-empty slot, the backup data in that slot will be overwritten. -Select the profile to backup the save data from. This should be your ***Nintendo*** Network ID. +Select the profile to backup the save data from. This should be your **_Nintendo_** Network ID. Optionally you may select to backup "common" save data. This save data should be shared by all users, and is not required to be backed up. Though you may still do so if you choose. @@ -142,14 +265,14 @@ Once the backup has completed, press the `B` button to return to the games menu. Select the backup slot you just backed the save data up to. -Select the profile to restore the save data to. This should be your ***Pretendo*** Network ID. +Select the profile to restore the save data to. This should be your **_Pretendo_** Network ID. - +SaveMii restore save data menu When ready, press the `A` button to transfer your data. Press `A` again to confirm your actions. If you get a message about backing up your data on your Pretendo profile, ignore. Your screen may briefly flash as the data is copied over. Once completed, exit SaveMii and ensure the game you transferred works properly on your Pretendo profile. - +Screenshot of a game that loaded successfully Repeat this process for any other save data you'd like to transfer to your Pretendo profile. diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..3ad1db3 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,26 @@ +import eslintConfig from '@pretendonetwork/eslint-config'; +import globals from 'globals'; + +export default [ + ...eslintConfig, + { + files: ['public/**'], + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } + }, + { + files: ['src/**'], + languageOptions: { + globals: { + ...globals.node + } + } + }, + { + ignores: ['**/*.bundled.js'] + } +]; diff --git a/locales/ar_AR.json b/locales/ar_AR.json index c06cbf8..8563312 100644 --- a/locales/ar_AR.json +++ b/locales/ar_AR.json @@ -1,6 +1,6 @@ { "nav": { - "about": "عنا", + "about": "عن", "faq": "أسئلة", "docs": "دليل", "credits": "الفريق", @@ -137,8 +137,6 @@ }, "account": { "settings": { - "downloadFilesDescription": "(لن يعمل على شبكة نينتندو)", - "downloadFiles": "تحميل ملفات الحساب", "settingCards": { "profile": "الملف الشخصي", "nickname": "لقب", diff --git a/locales/ast.json b/locales/ast.json index 34b6c9d..597663d 100644 --- a/locales/ast.json +++ b/locales/ast.json @@ -148,8 +148,6 @@ "loginPrompt": "¿Xá tienes una cuenta?" }, "settings": { - "downloadFiles": "Baxar los ficheros de la cuenta", - "downloadFilesDescription": "(nun funciona na Nintendo Network)", "upgrade": "Anovar la cuenta", "unavailable": "Nun ta disponible", "settingCards": { diff --git a/locales/ca_ES.json b/locales/ca_ES.json index 6e3a97c..e960fbb 100644 --- a/locales/ca_ES.json +++ b/locales/ca_ES.json @@ -63,7 +63,7 @@ }, { "question": "Funciona el Pretendo al Cemu o als emuladors?", - "answer": "Pretendo està dissenyat en principi per al hardware original de Wii U i 3DS; ara mateix l'únic emulador d'aquestes consoles compatible amb la Nintendo Network és el Cemu. Cemu no és compatible oficialment amb servidors personalitzats, però encara hauria de ser possible fer servir el Pretendo al Cemu.
Pretendo actualment no és compatible amb el Cemu." + "answer": "Pretendo suporta qualsevol client que pugui interactuar amb Nintendo Network. Actualment, l'únic emulador amb aquesta funció és Cemu. Cemu 2.0 suporta oficialment Pretendo sota la teva configuració del compte de Nintendo Network. Per a més informació sobre com iniciar-se amb Cemu, mira't documentation.
Citra no suporta el joc en línia de veritat i, per tant, no funciona amb Pretendo i no mostra cap signe de que realment funcioni, el joc en línia. Mikage, un emulador de 3DS per a mòbils podria rebre suport en el futur, tot i que és lluny de ser cert.\n\nPretendo està dissenyat en principi per al hardware original de Wii U i 3DS; ara mateix l'únic emulador d'aquestes consoles compatible amb la Nintendo Network és el Cemu. Cemu no és compatible oficialment amb servidors personalitzats, però encara hauria de ser possible fer servir el Pretendo al Cemu.
Pretendo actualment no és compatible amb el Cemu." }, { "question": "Si se'm va prohibir l'accés a la Nintendo Network, continuarà prohibit al Pretendo?", @@ -125,7 +125,153 @@ }, "bandwidthRaccoonQuotes": [ "Soc Bandwith el zorro, m'agrada mossegar els cables que passen pels servidors de Pretendo Network. Nyam!", - "Moltes persones ens pregunten si ens podriem posar en problemes legals amb Nintendo pel projecte; estic feliç d'anunciar que la meva tieta treballa a Nintendo i ella em va dir que no hi havia cap problema." + "Moltes persones ens pregunten si ens podriem posar en problemes legals amb Nintendo pel projecte; estic feliç d'anunciar que la meva tieta treballa a Nintendo i ella em va dir que no hi havia cap problema.", + "Webkit v537 és la millor versió de Webkit per a Wii U. No, no anem a portar Chrome a la Wii U.", + "No puc esperar per que el rellotge arribi a 03:14:08 UTC el 19 de Gener a 2038!", + "Realment, la Wii U és un sistema infravalorat: els anuncis van ser dolents, però la consola és genial. Ah, un moment, no estic segur perquè, però el meu Gamepad no s'està connectant a la meva Wii.", + "El tema principal de Super Mario World 2 - Yoshi's Island és boníssim i no hi ha manera de fer-me canviar d'opinió.", + "Els meus llançaments de Nintendo Switch han sigut Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack , Nintendo Switch Online + Yet Another Port Pack i Nintendo Switch Online + Dr. Kawashima's Brain Training/Brain Age \"Et va gustar molt el títol de la consola virtual de Nintendo Wii U, així que la portem de volta\" Pack. Realment pots dir que a Nintendo li importa.", + null, + "El meu primer vídeo al canal! He volgut fer vídeos des de fa molt, però el meu portàtil no funcionava bé i no podia fer funcionar fraps, skype o minecraft tot a la vegada. Però això s'ha acabat! Amb l'ajuda del meu professor de TI el meu portàtil funciona molt millor i ara puc grabar! Desitjo que tots gaudiu i si ho feu deixeu m'agrada i subscriviu-vos!!!" ] + }, + "account": { + "loginForm": { + "username": "Usuari", + "login": "Iniciar sessió", + "detailsPrompt": "Posa l'informació de la teva compte abaix", + "password": "Contrasenya", + "confirmPassword": "Confirmar contrasenya", + "email": "Correu electrònic", + "miiName": "Nom de mii", + "forgotPassword": "T'has olvidat la teva contrasenya?", + "register": "Crear compte", + "registerPrompt": "No tens un compte?", + "loginPrompt": "Ja tens un compte?" + }, + "account": "Compte", + "settings": { + "upgrade": "Millora compte", + "unavailable": "No disponible", + "settingCards": { + "userSettings": "Configuració d'usuari", + "profile": "Perfil", + "beta": "Beta", + "email": "Correu electrònic", + "password": "Contrasenya", + "nickname": "Sobrenom", + "country": "País/regió", + "production": "Producció", + "hasAccessPrompt": "El teu nivell et dona accés als servidors beta. Genial!", + "timezone": "Zona horària", + "upgradePrompt": "Servidors beta exclusius dels beta testers.
Per a convertir-te en un, actualitza el teu compte.", + "linkDiscord": "Connecta el compte de Discord", + "no_signins_notice": "Historial d'inici de sessió sense registres. Comprova'l més tard!", + "passwordResetNotice": "Després de canviar la teva contrasenya, se't tancarà la sessió a tots els dispositius.", + "otherSettings": "Més configuració", + "discord": "Discord", + "removeDiscord": "Elimina el compte de Discord", + "newsletterPrompt": "Rep actualitzacions del projecte via correu (pots desfer en qualsevol moment)", + "passwordPrompt": "Entra la contrasenya del teu PNID per a descarregar els arxius de Cemu", + "no_newsletter_notice": "Butlletí no disponible. Comprova'l més tard", + "no_edit_from_dashboard": "Actualment no es pot editar la configuració del PNID des del panell de control. Si us plau, actualitza la configuració des de la consola vinculada", + "newsletter": "Notícies", + "signInHistory": "Historial d'inicis de sessió", + "noDiscordLinked": "Cap compte de Discord connectat.", + "fullSignInHistory": "Mira l'historial complet", + "connectedToDiscord": "Connectat a Discord com", + "gender": "Gènere", + "birthDate": "Dia de naixement", + "serverEnv": "Entorn del servidor", + "signInSecurity": "Inici de sessió i seguretat" + } + }, + "forgotPassword": { + "sub": "Posa el teu correu electrònic/PNID abaix", + "input": "Correu electrònic o PNID", + "submit": "Sotmetre" + }, + "resetPassword": { + "password": "Contrasenya", + "confirmPassword": "Confirma contrasenya", + "submit": "Sotmetre", + "header": "Restaurar contrasenya", + "sub": "Introdueix nova contrasenya abaix" + }, + "accountLevel": [ + "Estàndard", + "Tester", + "Moderador", + "Desenvolupador" + ], + "banned": "Expulsat" + }, + "blogPage": { + "published": "Publicat per", + "publishedOn": "al", + "title": "Blog", + "description": "Les últimes actualitzacions en petites quantitats. Si vols veure actualitzacions més freqüents, considera donar-nos suport." + }, + "upgrade": { + "tierSelectPrompt": "Selecciona un nivell", + "unsub": "Donar-se de baixa", + "unsubPrompt": "Estàs segur que vols donar-te de baixa de tiername? Perdràs l'accés a les avantatges associades a ell.", + "back": "Endarrere", + "month": "Mes", + "unsubConfirm": "Donar-se de baixa", + "changeTier": "Canvia el nivell", + "changeTierPrompt": "Estàs segur que vols donar-te de baixa de oldtiername i donar-te d'alta a newtiername?", + "changeTierConfirm": "Canvia de nivell", + "title": "Actualitza" + }, + "progressPage": { + "title": "El nostre progrés", + "description": "Comprova el progrés i els objectius del projecte! (S'actualitza cada hora, més o menys, no mostra TOTS els canvis i objectius)" + }, + "localizationPage": { + "title": "Localitzem-nos", + "instructions": "Mira les instruccions de localització", + "description": "Enganxa un enllaç a una localització JSON accesible públicament per a probar-la al lloc", + "button": "Arxiu de prova", + "fileInput": "Arxiu de prova", + "filePlaceholder": "https://a.link.to/l_arxiu.json" + }, + "modals": { + "close": "Tancar", + "cancel": "Cancel·lar", + "confirm": "Confirmar" + }, + "docs": { + "quickLinks": { + "header": "Enllaços d'accés ràpid", + "links": [ + { + "header": "Instal·lar Pretendo" + }, + { + "header": "Has tingut un error?", + "caption": "Cerca-ho aquí" + } + ] + }, + "search": { + "caption": "Escriu-lo al cuadre de baix per a obtindre informació del teu problema!", + "label": "Codi d'error", + "title": "Tens un codi d'error?", + "no_match": "No s’han trobat coincidències" + }, + "sidebar": { + "getting_started": "Per a començar", + "welcome": "Benvingut", + "search": "Cercar", + "juxt_err": "Codis d'error - Juxt", + "install_extended": "Instal·lar Pretendo", + "install": "Instal·lar" + }, + "missingInLocale": "Aquesta pàgina no està disponible al teu idioma. Si us plau, consulta la versió en anglès a sota." + }, + "donation": { + "upgradePush": "Per esdevenir suscriptor i guanyar accés a increïbles avantatges, vés a la pàgina de millores.", + "progress": "Objectiu mensual: $${totd} de $${goald}/al mes, ${perc}%." } } diff --git a/locales/cs_CZ.json b/locales/cs_CZ.json index c4c1ac1..b0e12a0 100644 --- a/locales/cs_CZ.json +++ b/locales/cs_CZ.json @@ -33,54 +33,227 @@ "aboutUs": { "title": "O nás", "paragraphs": [ - "Pretendo je open-sourcový projekt, jehož cílem je reimplementovat Nintendo Network pro 3DS a Wii U pomocí pouze legálního reverse engineeringu.", - "Protože by naše služby byly jak svobodné, tak open source, můžou existovat dlouho po nevyhnutelném uzavření Nintendo Network." + "Pretendo je open-source projekt, jehož cílem je reimplementovat Nintendo Network pro 3DS a Wii U pomocí legálního reverse engineeringu.", + "Jelikož jsou naše služby svobodný a open-source software, nehrozí, že budou náhle ukončeny." ] }, "credits": { "title": "Náš tým", - "text": "Seznamte se s týmem, co za projektem stojí" + "text": "Seznamte se s týmem, co za projektem stojí", + "people": [ + { + "name": "Jonathan Barrow (jonbarrow)", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow", + "caption": "Vlastník projektu a vedoucí vývojář" + }, + { + "caption": "Výzkum a vývoj služby Miiverse", + "name": "Jemma (CaramelKat)", + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat" + }, + { + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "name": "quarky", + "caption": "Výzkum konzole Wii U a vývoj záplat" + }, + { + "name": "SuperMarioDaBom", + "caption": "Systémový výzkum a serverová architektura", + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom" + }, + { + "name": "pinklimes", + "caption": "Webový vývoj", + "picture": "https://github.com/gitlimes.png", + "github": "https://github.com/gitlimes" + }, + { + "name": "Shutterbug2000", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000", + "caption": "Systémový výzkum a vývoj serverů" + }, + { + "name": "Billy", + "picture": "https://github.com/InternalLoss.png", + "github": "https://github.com/InternalLoss", + "caption": "Archivace dat a serverová architektura" + }, + { + "github": "https://github.com/DaniElectra", + "name": "DaniElectra", + "picture": "https://github.com/danielectra.png", + "caption": "Systémový výzkum a vývoj serverů" + }, + { + "name": "niko", + "caption": "Vývoj webu a serverů", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "caption": "DevOps a práce s komunitou", + "github": "https://github.com/MatthewL246", + "name": "MatthewL246", + "picture": "https://github.com/MatthewL246.png" + }, + { + "name": "wolfendale", + "caption": "Vývoj serverového softwaru a optimalizace", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains", + "caption": "Vývoj 3DS záplat a výzkum" + } + ] }, "specialThanks": { "text": "Bez nich by Pretendo nebylo tam, kde je dnes.", - "title": "Zvláštní poděkování" + "title": "Zvláštní poděkování", + "people": [ + { + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork", + "name": "Přispívající na GitHubu", + "caption": "Lokalizace a jiné příspěvky" + }, + { + "github": "https://github.com/superwhiskers", + "name": "superwhiskers", + "picture": "https://github.com/superwhiskers.png", + "caption": "vývoj knihovny crunch" + }, + { + "name": "Stary", + "picture": "https://github.com/Stary2001.png", + "github": "https://github.com/Stary2001", + "caption": "3DS vývoj a disektor NEX" + }, + { + "name": "rverse", + "caption": "Sdílení informací o Miiverse", + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub" + }, + { + "name": "Kinnay", + "special": "Zvláštní poděkování", + "caption": "Výzkum datových struktur Nintenda", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay" + }, + { + "github": "https://github.com/ninstar", + "name": "NinStar", + "caption": "Ikony pro Mii Editor a Juxt reakce", + "picture": "https://github.com/ninstar.png" + }, + { + "name": "Rambo6Glaz", + "caption": "Konzolový výzkum a herní servery", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12" + }, + { + "picture": "https://github.com/GaryOderNichts.png", + "caption": "Vývoj Wii U záplat", + "github": "https://github.com/GaryOderNichts", + "name": "GaryOderNichts" + }, + { + "name": "zaksabeast", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast", + "caption": "Tvůrce 3DS záplat" + }, + { + "name": "mrjvs", + "caption": "Serverová architektura", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "name": "binaryoverload", + "caption": "Serverová architektura", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload" + }, + { + "caption": "Splatoon rotace a výzkum", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22", + "name": "Simonx22" + }, + { + "name": "OatmealDome", + "caption": "Splatoon rotace a výzkum", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome" + }, + { + "name": "GitHub přispěvovatelé", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork", + "caption": "Lokalizace a další příspěvky" + } + ] }, "faq": { "QAs": [ { "question": "Co je Pretendo?", - "answer": "Pretendo je open-sourcová náhrada za Nintendo Network, jejíž cílem je vytvořit vlastní servery pro rodinu konzolí Wii U a 3DS. Chceme zachovat online konektivitu těchto konzolí a umožnit tak hráčům dál hrát své oblíbené Wii U a 3DS tituly naplno." + "answer": "Pretendo je open-source náhrada za Nintendo Network, jejíž cílem je vytvořit vlastní servery pro rodinu konzolí Wii U a 3DS. Chceme zachovat online konektivitu těchto zařízení a umožnit tak hráčům nadále hrát své oblíbené Wii U a 3DS tituly." }, { "answer": "Bohužel ne. Již existující NNID na Pretendu nebudou fungovat, protože Vaše uživatelská data vlastní pouze Nintendo. Přestože by migrace účtů byla teoreticky možná, byla by riskantní a vyžadovala citlivé osobní údaje, které si nepřejeme držet.", "question": "Bude na Pretendu fungovat moje současné NNID?" }, { - "question": "Jak začít s Pretendem?", - "answer": "Pretendo v současné době není ve stavu, který by byl připraven pro veřejné použití. Nicméně, až nastane čas, Pretendo budete moct použít spuštěním našeho homebrew nástroje na Vašem zařízení." + "question": "Jak začnu s používáním Pretenda?", + "answer": "Pokud chcete začít používat Pretendo Network má 3DS, Wii U nebo jejich emulátorech, navštivte náš návod k nastavení!" }, { - "answer": "To nevíme. Mnohé služby a funkce Pretenda jsou vyvíjeny nezávisle na sobě (například, na Miiverse může pracovat jeden vývojář zatímco druhý pracuje na účtech a seznamu přátel) a proto nemůžeme poskytnout odhady, kdy bude něco hotové.", + "answer": "To nevíme. Mnohé služby a funkce Pretenda jsou vyvíjeny nezávisle na sobě (například, na Miiverse může pracovat jeden vývojář, zatímco druhý pracuje na účtech a seznamu přátel) a proto nemůžeme poskytnout odhady, kdy bude něco hotové.", "question": "Kdy bude [nějaká služba/funkce] hotová?" }, { - "question": "Funguje Pretendo na Cemu/emulátorech?", - "answer": "Pretendo podporuje jakýkoli klient který může interagovat s Nintendo Network. V současnosti je Cemu jediným emulátorem, který je tohoto schopen. Cemu 2.0 oficiálně podporuje Pretendo v nastavení Vašeho účtu. Pro bližší informace k Cemu můžete nahlédnout do dokumentace.
Citra nepodporuje skutečné online hraní a tudíž s Pretendem nefunguje a nezdá se, že by se toto v budoucnu změnilo. Mikage, emulátor 3DS pro mobilní zařízení, může podporu poskytnout v budoucnu, ale toto není jisté." + "question": "Kdy přidáte další hry?", + "answer": "Na nových hrách pracujeme, jakmile máme pocit, že na to jsou naše backendové knihovny dostatečně připraveny, a některý z vývojářů má čas se této hře věnovat. Mnoho naší práce připadá na stabilizaci a dokončování našich existujících her - chceme v nich nabídnout co nejlepší zážitek, než se přesuneme na nové tituly. Protože se nová práce objevuje neustále, nemůžeme poskytnout odhad, kdy se to stane." }, { - "question": "Pokud jsem zabanován(a) na Nintendo Network, přenese se můj ban do Pretenda?", - "answer": "Nemáme přístup k banům na Nintendo Network a tito uživatelé na naší službě zabanováni nebudou. Budeme mít ovšem pravidla k používání naší služby, jejichž porušení by mohlo vyústit v ban na Pretendu." + "question": "Bude mi na používání služeb Pretenda stačit emulátor?", + "answer": "Ne. Pokud si přejete používat emulátor, budete potřebovat opravdovou konzoli. Tím můžeme zajistit zvýšenou bezpečnost a efektivnější vynucování pravidel, které jsou klíčové pro poskytování bezpečných a příjemných služeb." + }, + { + "question": "Funguje Pretendo na Cemu/emulátorech?", + "answer": "Cemu 2.1 oficiálně podporuje Pretendo v nastavení účtu. Pro informace jak začít s Cemu navštivte dokumentaci.
Některé 3DS emulátory mohou nabízet podporu, ale v současnosti nemáme oficiální doporučení ani návod k nastavení. Citra ve své poslední vydané verzi Pretendo nepodporuje." }, { "question": "Bude Pretendo podporovat Wii/Switch?", - "answer": "Pro Wii již existují vlastní servery, které poskytuje Wiimmfi. V současnosti neplánujeme cílit na Switch, protože online služby Switche jsou placené a od Nintendo Network se zásadně liší." + "answer": "Pro Wii již existují vlastní servery, které poskytuje Wiimmfi. V současnosti neplánujeme vyvíjet pro Switch, protože online služby Switche jsou placené a od Nintendo Network se zásadně liší." }, { "question": "Budu pro připojení potřebovat modifikovanou konzoli?", - "answer": "Ano, Vaše zařízení musí být modifikováno; na Wii U budete potřebovat pouze přístup k Homebrew Launcher (t.j. Haxchi, Coldboot Haxchi nebo exploit s webovým prohlížečem), informace pro připojení z 3DS jsou v přípravě." + "answer": "Pro nejlepší výsledek budete svou konzoli muset modifikovat - přesněji pomocí Aroma na Wii U a Luma3DS na 3DS. Nicméně, na Wii U je dostupná metoda SSSL, která, byť s omezenou funkcionalitou, nabízí připojení bez modifikací. Pro podrobnosti navštivte návod k nastavení." + }, + { + "question": "Pokud jsem zabanován(a) na Nintendo Network, přenese se můj ban do Pretenda?", + "answer": "Nemáme přístup k seznamu banů na Nintendo Network, takže nikdo z uživatelů Nintendo Network ban na Pretendu nemá. Máme však vlastní zásady pro používání naší služby, jejichž porušení by mohlo vyústit v ban na Pretendu." + }, + { + "question": "Můžu na Pretendu používat mody a cheaty?", + "answer": "Pouze v soukromých zápasech - narušování online her lidem, kteří s tím nesouhlasili (tedy ve veřejných zápasech) je proti zásadám. Bany konzolím a účtům udělujeme pravidelně. Pretendo dále používá dodatečná bezpečnostní opatření, která brání v obcházení banů např. změnou sériového čísla." } ], - "text": "Zde jsou otázky, které jsou nám často kladeny, pro snadné informování.", + "text": "Zde je pár častých otázek, které často slyšíme, abyste byli v obraze.", "title": "Často kladené dotazy" }, "showcase": { @@ -118,13 +291,13 @@ "password": "Heslo", "gender": "Pohlaví", "discord": "Discord", - "newsletterPrompt": "Posílat aktualizace projektu emailem (Kdykoliv můžete posílání zrušit)", + "newsletterPrompt": "Posílat aktualizace projektu emailem (lze kdykoli zrušit)", "nickname": "Přezdívka", "signInHistory": "Historie přihlášení", "beta": "Beta", "serverEnv": "Prostředí serveru", "noDiscordLinked": "Není připojen žádný Discord účet.", - "fullSignInHistory": "Zobrazit celou historii přihlašování", + "fullSignInHistory": "Zobrazit celou historii přihlášení", "production": "Produkční", "linkDiscord": "Připojit Discord účet", "country": "Země/region", @@ -135,13 +308,11 @@ "connectedToDiscord": "Připojeno k Discordu jako", "newsletter": "Newsletter", "hasAccessPrompt": "Váš aktuální tier Vám dává přístup k beta serverům. Super!", - "passwordResetNotice": "Po změně hesla budete odhlášeni ze všech zařízení.", + "passwordResetNotice": "Po změně hesla budete odhlášen(a) ze všech zařízení.", "otherSettings": "Ostatní nastavení", - "no_edit_from_dashboard": "Úprava PNID nastavení z uživatelského panelu není aktuálně dostupné. Změňte prosím Vaše uživatelské nastavení z připojené herní konzole." + "no_edit_from_dashboard": "Úprava PNID nastavení z uživatelského panelu není aktuálně dostupná. Změňte prosím Vaše uživatelské nastavení z připojené herní konzole." }, "unavailable": "Nedostupné", - "downloadFiles": "Stáhnout soubory účtu", - "downloadFilesDescription": "(Nebude fungovat na Nintendo Networku)", "upgrade": "Upgradovat účet" }, "accountLevel": [ @@ -188,7 +359,7 @@ "unsubConfirm": "Zrušit předplatné", "tierSelectPrompt": "Vyberte si tier", "changeTierPrompt": "Jste si jisti, že chcete zrušit předplatné oldtiername a předplácet newtiername?", - "unsubPrompt": "Jste si jisti, že chcete zrušit předplatné tiername? Přijdete o všechny výhody spojené s tímto tierem.", + "unsubPrompt": "Jste si jisti, že chcete zrušit předplatné tiername? S okamžitou platností přijdete o všechny výhody spojené s tímto tierem.", "title": "Upgradovat", "description": "Dosažení měsíčního cíle udělá z Pretenda plnohodnotné zaměstnání a umožní nám poskytovat kvalitnější aktualizace v rychlejším tempu." }, @@ -209,7 +380,7 @@ "sidebar": { "getting_started": "Začínáme", "install_extended": "Nainstalovat Pretendo", - "install": "Nainstalovat", + "install": "Instalace", "welcome": "Vítejte", "search": "Hledat", "juxt_err": "Chybové kódy - Juxt" @@ -217,7 +388,7 @@ "search": { "no_match": "Nenalezeny žádné shody", "title": "Máte chybový kód?", - "caption": "Napište ho do políčka níže pro zobrazení informací k Vašemu problému!", + "caption": "Napište jej do políčka níže pro zobrazení informací k Vašemu problému!", "label": "Chybový kód" }, "missingInLocale": "Tato stránka je nedostupná ve Vaší lokalizaci. Podívejte se prosím na Anglickou verzi níže." @@ -255,15 +426,16 @@ "Úvodní hudba Super Mario World 2 - Yoshi's Island je slast pro moje uši a nikdo mě nepřesvědčí o opaku.", "Moje oblíbená vydání Switche byly Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pack a Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Ten Virtual Console titul pro Wii U se ti fakt líbil, tak ho přinášíme zpátky\" Pack. Je fakt zřejmý, že nás má Nintendo rádo.", "Když moravák řekne \"Znáš přéce Ash, taký zlatíčko, je tak moc UwU\", snaží se neurážlivě říct \"Ash pořád UwUuje a je to fakt divný a hloupý, kéž by to nedělala\"", - "Muj prvni videjko na mem kanale!! Uz dlouho jsem si chtel delat videa, ale muj laptop byl docela spatni a nemohl jsem spustit fraps, skype a majnkraft najednou. Ale ted je to už minulost! S pomoci sveho ajty učitele mi notebuk beži lepe a ted muzu nahravat! Doufam, ze se vam to bude libit a pokud ano, tak prosim dejte lajk a odbjer!!!\"" + "Muj prvni videjko na mem kanale!! Uz dlouho jsem si chtel delat videa, ale muj laptop byl docela spatni a nemohl jsem spustit fraps, skype a majnkraft najednou. Ale ted je to už minulost! S pomoci sveho ajty učitele mi notebuk beži lepe a ted muzu nahravat! Doufam, ze se vam to bude libit a pokud ano, tak prosim dejte lajk a odbjer!!!\"", + "to vypadá mega vyfeleně" ], "usefulLinks": "Užitečné odkazy", "widget": { "captions": [ "Chcete být v obraze?", - "Připojte se do našeho Discord serveru!" + "Přidejte se k našemu Discord serveru!" ], - "button": "Připojit se nyní!" + "button": "Připojte se nyní!" }, "socials": "Sociální sítě" }, @@ -278,5 +450,8 @@ "donation": { "progress": "$${totd} z měsíčního cíle $${goald} vybráno (${perc}% měsíčního cíle)", "upgradePush": "Abyste se stal(a) předplatitelem a získal(a) přístup k zajímavým výhodám navštivte upgrade stránku." + }, + "notfound": { + "description": "Jejda! Tuto stránku jsme nenalezli." } } diff --git a/locales/cy_GB.json b/locales/cy_GB.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/cy_GB.json @@ -0,0 +1 @@ +{} diff --git a/locales/da_DK.json b/locales/da_DK.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/da_DK.json @@ -0,0 +1 @@ +{} diff --git a/locales/de_DE.json b/locales/de_DE.json index 2be6f31..c492bc9 100644 --- a/locales/de_DE.json +++ b/locales/de_DE.json @@ -23,7 +23,7 @@ } }, "hero": { - "subtitle": "Spiel-Server", + "subtitle": "Spielserver", "title": "Rekonstruiert", "text": "Pretendo ist ein kostenloser, Open-Source-Ersatz für Nintendo-Server für den 3DS und die Wii U, der die Onlineverbindung für alle, auch nach der Einstellung der offiziellen Server, ermöglicht", "buttons": { @@ -34,7 +34,7 @@ "title": "Über uns", "paragraphs": [ "Pretendo ist ein Open-Source-Projekt, welches das Nintendo Network für den 3DS und die Wii U durch Clean-Room-Reverse-Engineering rekonstruiert.", - "Da unsere Dienste kostenlos und Open-Source sind, können diese auch nach der offiziellen Schließung des Nintendo Networks weiter existieren." + "Da unsere Dienste kostenlos und Open-Source sind, werden diese auch zukünftig weiterhin existieren." ] }, "progress": { @@ -42,7 +42,7 @@ "githubRepo": "Github-Repository" }, "faq": { - "title": "Frequently Asked Questions (Häufig gestellte Fragen)", + "title": "Häufig gestellte Fragen", "text": "Hier sind einige Fragen, die wir häufiger gestellt bekommen, zur schnellen Informationsbeschaffung.", "QAs": [ { @@ -55,27 +55,39 @@ }, { "question": "Wie benutze ich Pretendo?", - "answer": "Pretendo ist aktuell nicht für die öffentliche Nutzung verfügbar. Sobald das Pretendo Network bereit ist, kannst du es einfach durch unseren Homebrew-Patcher auf deiner Konsole nutzen." + "answer": "Um Pretendo Network auf der 3DS-Familie, der Wii U oder Emulatoren zu nutzen, sollten sie den Installationsanweisungen folgen: setup instructions" }, { "question": "Weißt du, wann Funktion/Dienst bereit ist?", "answer": "Nein. Viele der Funktionen und Dienste von Pretendo werden unabhängig voneinander entwickelt (z. B., ein Entwickler arbeitet am Miiverse während ein anderer an Accounts und der Freundesliste arbeitet), deshalb können wir keine genauen Angaben zur jeweiligen Fertigstellung machen." }, { - "question": "Funktioniert Pretendo mit CEMU, oder anderen Emulatoren?", - "answer": "Pretendo unterstützt jeden Client, der mit dem Nintendo Network interagieren kann. Derzeit ist Cemu der einzige Emulator mit dieser Art von Funktionalität. Cemu 2.0 unterstützt Pretendo offiziell unter deinen Netzwerk-Kontooptionen im Emulator. Informationen zu den ersten Schritten mit Cemu findest du in der Dokumentation.
Citra unterstützt kein echtes Online-Spiel und funktioniert daher nicht mit Pretendo und zeigt überhaupt keine Anzeichen dafür, echtes Online-Spiel zu unterstützen. Mikage, ein 3DS-Emulator für mobile Geräte, könnte in Zukunft Unterstützung bieten, obwohl dieser alles andere als sicher ist." + "question": "Wann werdet ihr neue Spiele hinzufügen?", + "answer": "Wir arbeiten am Hinzufügen neuer Spiele, sobald unsere Backend-Libraries bereit dazu sind, diese zu unterstützen und sobald unsere Entwickler Zeit haben, diese instand zu halten. Eine Menge unserer Zeit fließt in die Stabilisierung und Abschließen der bereits existierenden Spiele. Wir möchten euch die besten Spielerfahrungen möglich machen, bevor wir uns neuen Spieltiteln widmen. Aufgrund von ständiger neu auftauchender Arbeit können wir keine Angaben machen, wann wir neue Spiele hinzufügen werden." }, { - "question": "Wenn ich im Nintendo Network gebannt wurde, bin ich dann in Pretendo auch gebannt?", - "answer": "Wir werden keinen Zugriff auf Nintendos Bannliste haben, weshalb kein Nutzer auf unserem Netzwerk gebannt sein wird. Trotzdem, wir haben Regeln für die Nutzung unserer Dienste und die Nichteinhaltung dieser kann zu einem Bann führen." + "question": "Reicht ein Emulator aus, um Pretendo zu nutzen?", + "answer": "Nein. Aus Sicherheits- und Moderationsgründen musst du, auch wenn du einen Emulator benutzt, trotzdem eine echte Konsole besitzen. Das ermöglicht erhöhte Sicherheit und ein einfacheres Umsetzen der Regeln, um ein sicheres und angenehmes Erlebnis mit unseren Diensten zu bieten." + }, + { + "question": "Funktioniert Pretendo auf Cemu/Emulatoren?", + "answer": "Cemu 2.1 unterstützt offiziell Pretendo unter den Netzwerk-Account-Optionen im Emulator. Für mehr Informationen, wie du mit Cemu loslegen kannst, beachte bitte die Dokumentationbr> Einige 3DS-Emulatoren oder Forks könnten uns unterstützen, aber wir haben zu dieser Zeit keine offizielle Empfehlung oder Setup-Anleitung. Die letzten Builds von Citra unterstützen Pretendo nicht." }, { "question": "Wird Pretendo die Wii/Switch unterstützen?", - "answer": "Für die Wii gibt es bereits eigene Server von Wiimmfi. Aktuell möchten wir die Switch auch nicht als Ziel festlegen, da der Online-Service der Switch kostenpflichtig ist und sich stark vom Nintendo Network unterscheidet." + "answer": "Inoffizielle Wii-Server werden bereits von Wiimmfi bereitgestellt. Eine Unterstützung der Switch streben wir nicht an, da es sich um ein gebührenpflichtiges Netzwerk handelt, das sich fundamental vom Nintendo Network unterscheidet." }, { - "question": "Benötige ich einen Hack um Pretendo zu verwenden?", - "answer": "Ja, du musst deine Konsole hacken, allerdings reicht auf der Wii U den Zugriff zum Homebrew-Launcher (z.B. über Haxchi, CBHC, oder den Browser-Exploit). Informationen, wie der 3DS verbunden wird, werden später noch veröffentlicht." + "question": "Werde ich meine Konsole modifizieren müssen, um mich verbinden zu können?", + "answer": "Wir haben keinen Zugriff auf die Bannliste des Nintendo Network, daher sind keine Nintendo Network Nutzer gebannt. Allerdings haben wir Regeln, die bei der Nutzung des Dienstes befolgt werden müssen, und die Nichteinhaltung dieser Regeln kann zu einem Bann führen." + }, + { + "question": "Kann ich Cheats oder Mods online mit Pretendo verwenden?", + "answer": "Nur in privaten Matches – sich einen unfairen Vorteil zu verschaffen oder das Online-Erlebnis von Personen zu stören, die nicht zugestimmt haben (wie beispielsweise in öffentlichen Matches), ist ein bannbarer Verstoß. Wir verhängen regelmäßig Konto- und Konsolensperren sowohl für Wii U- als auch für 3DS-Systeme. Pretendo verwendet zusätzliche Sicherheitsmaßnahmen, die traditionelle ‘Entbannungs’-Methoden wie das Ändern der Seriennummer unwirksam machen." + }, + { + "question": "Kann ich Cheats oder Mods online mit Pretendo verwenden?", + "answer": "Nur in privaten Matches – sich einen unfairen Vorteil zu verschaffen oder das Online-Erlebnis anderer ohne deren Zustimmung zu stören (z. B. in öffentlichen Matches), ist ein bannbarer Verstoß. Wir verhängen regelmäßig Account- und Konsolensperren für Wii U- und 3DS-Systeme. Pretendo nutzt zusätzliche Sicherheitsmaßnahmen, die herkömmliche 'Unban'-Methoden, wie das Ändern der Seriennummer, unwirksam machen." } ] }, @@ -85,7 +97,7 @@ "cards": [ { "title": "Spiel-Server", - "caption": "Bringt dir deine Lieblingsspiele und Inhale zurück, mithilfe eigener Server." + "caption": "Bringt dir deine Lieblingsspiele und Inhalte zurück, mithilfe eigener Server." }, { "title": "Juxtaposition", @@ -99,11 +111,172 @@ }, "credits": { "title": "Das Team", - "text": "Triff das Team hinter dem Projekt" + "text": "Lerne das Team hinter dem Projekt kennen", + "people": [ + { + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow", + "name": "Jonathan Barrow (jonbarrow)", + "caption": "Projektinhaber und leitender Entwickler" + }, + { + "name": "Jemma (CaramelKat)", + "picture": "https://github.com/caramelkat.png", + "caption": "Miiverse Analyse/Forschung und Entwicklung", + "github": "https://github.com/CaramelKat" + }, + { + "name": "quarky", + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "caption": "Wii U Forschung und Patch-Entwicklung" + }, + { + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom", + "name": "SuperMarioDaBom", + "caption": "Systemforschung und Serverarchitektur" + }, + { + "picture": "https://github.com/gitlimes.png", + "name": "pinklimes", + "github": "https://github.com/gitlimes", + "caption": "Webentwicklung" + }, + { + "name": "Shutterbug2000", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000", + "caption": "Systemforschung und Server Entwicklung" + }, + { + "name": "Billy", + "picture": "https://github.com/InternalLoss.png", + "github": "https://github.com/InternalLoss", + "caption": "Erhaltung und Server-Architektur" + }, + { + "name": "DaniElectra", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra", + "caption": "Systemforschung und Server-Entwicklung" + }, + { + "name": "niko", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii", + "caption": "Web- und Serverentwicklung" + }, + { + "name": "MatthewL246", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246", + "caption": "DevOps und Community-Arbeit" + }, + { + "name": "wolfendale", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale", + "caption": "Server-Entwicklung und Optimierungen" + }, + { + "name": "TraceEntertains", + "picture": "https://github.com/TraceEntertains.png", + "caption": "3DS Patch-Entwicklung und Forschung", + "github": "https://github.com/TraceEntertains" + } + ] }, "specialThanks": { "title": "Besonderer Dank", - "text": "Ohne sie wäre Pretendo nicht, wo es heute ist." + "text": "Ohne sie wäre Pretendo nicht da, wo es heute ist.", + "people": [ + { + "name": "GitHub-Mitwirkende", + "caption": "Übersetzungen und andere Beiträge", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "caption": "Crunch Library Entwicklung", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers", + "name": "superwhiskers" + }, + { + "name": "Stary", + "github": "https://github.com/Stary2001", + "picture": "https://github.com/Stary2001.png", + "caption": "3DS Entwicklung und NEX Dissector" + }, + { + "caption": "Miiverse-Informationsaustausch", + "github": "https://twitter.com/rverseClub", + "name": "rverse", + "picture": "https://github.com/rverseTeam.png" + }, + { + "special": "Besonderer Dank", + "caption": "Forschung zu Nintendo-Datenstrukturen", + "name": "Kinnay", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay" + }, + { + "name": "NinStar", + "caption": "Symbole für dem Mii-Editor und Juxt-Reaktionen", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "name": "Rambo6Glaz", + "caption": "Konsolenforschung und Spiele-Server", + "github": "https://github.com/EpicUsername12", + "picture": "https://github.com/EpicUsername12.png" + }, + { + "github": "https://github.com/GaryOderNichts", + "name": "GaryOderNichts", + "caption": "Wii U Patch-Entwicklung", + "picture": "https://github.com/GaryOderNichts.png" + }, + { + "name": "zaksabeast", + "caption": "3DS Patch-Ersteller", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast" + }, + { + "name": "mrjvs", + "caption": "Server-Architektur", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "name": "binaryoverload", + "caption": "Server-Architektur", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload" + }, + { + "name": "Simonx22", + "caption": "Spatoon-Rotations und Forschung", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "name": "OatmealDome", + "caption": "Splatoon-Rotations und Forschung", + "github": "https://github.com/OatmealDome", + "picture": "https://github.com/OatmealDome.png" + }, + { + "caption": "Lokalisierung und andere Beiträge", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "name": "GitHub-Beiträger", + "github": "https://github.com/PretendoNetwork" + } + ] }, "discordJoin": { "title": "Bleib auf dem Laufenden", @@ -132,7 +305,8 @@ "Die Titelmusik von \"Super Mario World 2 - Yoshi's Island\" ist ein absoluter Hit und niemand kann mir das Gegenteil beweisen.", "Meine Lieblingsveröffentlichungen für die Nintendo Switch sind Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Noch Ein Port Pack und Nintendo Switch Online + Dr. Kawashimas Gehirnjogging / Brain Age \"Ihr Mochtet Den Nintendo Wii U Virtual Console-Titel Sehr, Also Bringen Wir Ihn Zurück\" Pack. Man merkt, dass es Nintendo am Herzen liegt.", "So etwas wie \"Du kennst Ash, Gott segne ihr Herz, sie schreibt den ganzen Tag UwU\" ist die südländische Art zu sagen \"Ash schreibt die ganze Zeit UwU und es ist wirklich seltsam und dumm und ich wünschte, sie würde es nicht tun\"", - "Mein erstes Video auf meinem kanal!! Ich wolte schon lange viedeos machen, aber mein leptop wahr zu schwach um Fraps, Skipe und Minekraft gleichzeitieg laufen zu laßen. aber dass ist jetzt vorbei. mit etwas hilfe von meinen informatiklerer läüft mein leptop jetzt fiel besser und ich kan aufnemen. ich hoffe ihr alle mögt dass video und fals ihr das tut bite gebt einen daumen nach oben und aboniert!!!" + "Mein erstes Video auf meinem kanal!! Ich wolte schon lange viedeos machen, aber mein leptop wahr zu schwach um Fraps, Skipe und Minekraft gleichzeitieg laufen zu laßen. aber dass ist jetzt vorbei. mit etwas hilfe von meinen informatiklerer läüft mein leptop jetzt fiel besser und ich kan aufnemen. ich hoffe ihr alle mögt dass video und fals ihr das tut bite gebt einen daumen nach oben und aboniert!!!", + "Sieht gut für mich aus" ] }, "progressPage": { @@ -148,9 +322,9 @@ "account": { "accountLevel": [ "Standard", - "Tester*innen", - "Moderator*innen", - "Entwickler" + "Tester*in", + "Moderator*in", + "Entwickler*in" ], "loginForm": { "login": "Anmelden", @@ -198,8 +372,6 @@ "no_newsletter_notice": "Newsletter ist momentan nicht verfügbar. Schau später nochmal vorbei", "userSettings": "Nutzer-Einstellungen" }, - "downloadFiles": "Konto-Dateien herunterladen", - "downloadFilesDescription": "(funktioniert nicht im Nintendo Network)", "upgrade": "Konto upgraden", "unavailable": "Nicht verfügbar" }, @@ -225,7 +397,7 @@ "month": "Monat", "tierSelectPrompt": "Wähle eine Stufe", "unsub": "Deabonnieren", - "unsubPrompt": "Bist du dir sicher, dass du tiername deabonnieren möchtest? Du wirst den Zugang zu den Vorteilen verlieren, die mit dieser Stufe verbunden sind.", + "unsubPrompt": "Bist du dir wirklich sicher, dass du dich von tiername ablemden möchtest? Du wirst sofort den Zugriff auf die Vorteile dieser Stufe verlieren.", "unsubConfirm": "Deabonnieren", "changeTier": "Stufe ändern", "changeTierPrompt": "Bist du dir sicher, dass du oldtiername deabonnieren und newtiername abonnieren möchtest?", @@ -278,5 +450,8 @@ "cancel": "Abbrechen", "confirm": "Bestätigen", "close": "Schließen" + }, + "notfound": { + "description": "Woops! Diese Seite konnte nicht gefunden werden." } } diff --git a/locales/el_GR.json b/locales/el_GR.json index 692a84c..92d9545 100644 --- a/locales/el_GR.json +++ b/locales/el_GR.json @@ -1,6 +1,6 @@ { "nav": { - "faq": "Συνηθησμένες Ερωτήσεις", + "faq": "Συχνές Ερωτήσεις", "accountWidget": { "settings": "Ρυθμίσεις", "logout": "Αποσύνδεση" @@ -8,33 +8,278 @@ "dropdown": { "captions": { "credits": "Γνώρισε την ομάδα", - "about": "Σχετικά με το έργο" + "about": "Σχετικά με το έργο μας", + "progress": "Κοίταξε την πρόοδο του έργου και τους στόχους του", + "blog": "Οι πιο πρόσφατες ενημερώσεις, συνοπτικά", + "faq": "Συχνές ερωτήσεις" } }, "about": "Πληροφορίες", "docs": "Έγγραφα", "progress": "Πρόοδος", "account": "Λογαριασμός", - "donate": "Κάνε δωρεά" + "donate": "Κάνε δωρεά", + "credits": "Συντελεστές", + "blog": "Blog" }, "hero": { "subtitle": "Servers παιχνιδιών", - "title": "Αναδημιουργημένο", + "title": "Αναδημιουργημένοι", "buttons": { "readMore": "Διαβάστε περισσότερα" }, - "text": "Το Pretendo είναι μία δωρεάν, με ανοιχτό κώδικα αντικατάσταση για τους Nintendo servers του 3DS και του Wii U, επιτρέποντας online σύνδεση για όλους, ακόμα και όταν οι αρχικοί servers διακοπούν" + "text": "Το Pretendo είναι ένας open source αντικαταστάτης των server της Nintendo τόσο για το 3DS όσο και για το Wii U, επιτρέποντας τη διαδικτυακή συνδεσιμότητα για όλους, ακόμη και μετά τη διακοπή της λειτουργίας των αρχικών server" }, "aboutUs": { "title": "Σχετικά με εμάς", "paragraphs": [ - "Το Pretendo είναι ένα έργο ανοιχτής πηγής που στοχεύει να αναδημιουργήσει το Nintendo Network για το 3DS και το Wii U χρησιμοποιώντας αντίστροφη μηχανική καθαρού δωματίου." + "Το Pretendo είναι ένα open source project που στοχεύει στην αναδημιουργία του Nintendo Network για το 3DS και το Wii U χρησιμοποιώντας clean-room reverse engineering.", + "Εφόσον οι υπηρεσίες μας είναι δωρεάν και ανοιχτού κώδικα, θα μπορούν να υπάρχουν για πολύ καιρό μετά το αναπόφευκτο κλείσιμο του Nintendo Network." ] }, "progress": { - "title": "Πρόοδος" + "title": "Πρόοδος", + "githubRepo": "Αποθετήριο Github" }, "faq": { - "text": "Ορίστε μερικές συνηθισμένες ερωτήσεις που μας ρωτάνε για εύκολη πληροφόρηση." + "text": "Εδώ βρίσκονται ορισμένες συνήθεις ερωτήσεις, για εύκολη πληροφόρηση.", + "QAs": [ + { + "question": "Τι είναι το Pretendo;", + "answer": "Το Pretendo είναι ένας open source αντικαταστάτης του Nintendo Network που στοχεύει στη δημιουργία custom server για την οικογένεια κονσολών Wii U και 3DS. Στόχος μας είναι η διατήρηση της online λειτουργικότητας των κονσολών αυτών, ώστε οι παίκτες να συνεχίσουν να απολαμβάνουν τα αγαπημένα τους Wii U και 3DS παιχνίδια στο έπακρο." + }, + { + "question": "Θα λειτουργούν τα υπάρχοντα NNIDs μου στο Pretendo;", + "answer": "Δυστυχώς, όχι. Τα υπάρχοντα NNID δεν θα λειτουργούν στο Pretendo, καθώς μόνο η Nintendo κρατάει τα δεδομένα του χρήστη. Παρότι είναι θεωρητικά δυνατόν μια μεταφορά NNID σε PNID, θα είναι ριψοκίνδυνο και θα χρειαστεί ευαίσθητα δεδομένα χρηστών που δεν επιθυμούμε να συλλέξουμε." + }, + { + "question": "Πώς χρησιμοποιώ το Pretendo;", + "answer": "Πρός το παρόν το Pretendo δεν είναι έτοιμο για χρήση. Όταν όμως είναι έτοιμο, θα μπορείς να το χρησιμοποιήσεις, τρέχοντας απλώς το Homebrew Patcher μας στη κονσόλα σου." + }, + { + "answer": "Όχι. Πολλές από τις λειτουργίες/υπηρεσίες της Pretendo αναπτύσονται ανεξάρτητα (για παράδειγμα, το Miiverse μπορεί να δουλεύεται από έναν προγραμματιστή, ενώ τα συστήματα Λογαριασμών και Φίλων να δουλεύεται από άλλον), άρα δεν μπορούμε να δώσουμε ένα ολικό εκτιμώμενο χρόνο στο ποσό θα χρειαστεί.", + "question": "Γνωρίζετε πότε θα είναι έτοιμη η λειτουργία/υπηρεσία;" + }, + { + "question": "Το Pretendo δουλεύει σε Cemu/emulators;", + "answer": "To Pretendo υποστηρίζει οποιονδήποτε client που μπορεί να αλληλεπιδράσει με το Nintendo Network. Αυτή τη στιγμή το μόνο emulator με αυτή τη λειτουργία είναι το Cemu. Το Cemu 2.0 υποστηρίζει το Pretendo μέσω των ρυθμίσεων του λογαριασμού δικτύου στο emulator. Για περαιτέρω πληροφορίες σχετικά με το Cemu, δες εδώ τις documentation.
Το Citra δεν υποστηρίζει online play και άρα δεν δουλέυει με το Pretendo, και πιθανώς δεν θα το υποστηρίξει ποτέ. To Mikage, ενα 3DS emulator για κινητά, ίσως το υποστηρίζει στο μέλλον, κάτι όμως το οποίο είναι αβέβαιο." + }, + { + "question": "Αν έχω αποκλειστεί στο Nintendo Network, θα παραμείνω αποκλεισμένος στο Pretendo;", + "answer": "Δεν έχουμε πρόσβαση στη λίστα αποκλεισμένων του Nintendo Network, άρα κανένας χρήστης δεν θα είναι αποκλεισμένος στην υπηρεσία μας. Παρ' όλα αυτά, θα υπάρχουν κανόνες κατά τη χρήση της υπηρεσίας μας και η μη τήρηση αυτών των κανόνων μπορεί να οδηγήσει σε αποκλεισμό." + }, + { + "answer": "Το Wii ήδη έχει custom servers παρεχόμενους από το Wiimmfi. Αυτή τη στιγμή το Switch δεν είναι στο στόχαστρο μας αφού είναι υπηρεσία επί πληρωμή και τελείως διαφορετικό από το Nintendo Network.", + "question": "Το Pretendo θα υποστηρίξει το Wii/Switch;" + }, + { + "answer": "Ναι, θα χρειαστείς να τροποποιήσεις τη συσκευή σου για να συνδεθείς. Όμως, χρειάζεσαι μόνο πρόσβαση στο Homebrew Launcher (π.χ Haxchi, Coldboot Haxchi, ή web browser exploit) στο Wii U, με πληροφορίες στο πως θα συνδεθείςστο 3DS να έρχονται σε μελλοντική ημερομηνία.", + "question": "Θα χρειαστώ hacks για να συνδεθώ;" + } + ], + "title": "Συχνές ερωτήσεις" + }, + "specialThanks": { + "title": "Ιδιαίτερα ευχαριστώ", + "text": "Χωρίς αυτά τα άτομα, το Pretendo δεν θα ήταν εδώ που είναι τώρα." + }, + "account": { + "settings": { + "settingCards": { + "userSettings": "Ρυθμίσεις χρήστη", + "serverEnv": "Περιβάλλον server", + "beta": "Beta", + "upgradePrompt": "Οι Beta servers είναι αποκλειστικά για beta testers.
Για να γίνεις beta tester, ανάβάθμισε το λογαριασμό σου.", + "hasAccessPrompt": "Η τρέχουσα κατηγορία λογαριασμού σου, σου δίνει πρόσβαση στον beta server. Τέλεια!", + "fullSignInHistory": "Δες ολόκληρο το ιστορικό σύνδεσης", + "discord": "Discord", + "newsletterPrompt": "Λάβε ενημερώσεις του project μέσω email (μπορείς να αποσυρθείς οποιαδήποτε στιγμή)", + "nickname": "Ψευδώνυμο", + "passwordPrompt": "Συμπλήρωσε τον κωδικό PNID για να κατεβάσεις τα αρχεία Cemu", + "no_signins_notice": "Το ιστορικό σύνδεσης δεν παρακολουθείται επί του παρόντος. Δες ξανά αργότερα!", + "no_newsletter_notice": "Το ενημερωτικό δελτίο δεν είναι διαθέσιμο επί του παρόντος. Δες ξανά αργότερα!", + "no_edit_from_dashboard": "Η επεξεργασία ρυθμίσεων PNID από το πίνακα ελέγχου χρήστη είναι προς το παρόν μη διαθέσιμη. Παρακαλώ ενημέρωσε τις ρυθμίσεις χρήστη από τη συνδεδεμένη σου κονσόλα", + "country": "Χώρα/Περιοχή", + "timezone": "Ζώνη ώρας", + "production": "Παραγωγή", + "signInSecurity": "Σύνδεση και ασφάλεια", + "password": "Κωδικός", + "signInHistory": "Ιστορικό σύνδεσης", + "otherSettings": "Λοιπές ρυθμίσεις", + "newsletter": "Ενημερωτικό δελτίο", + "birthDate": "Ημερομηνία γέννησης", + "gender": "Φύλο", + "profile": "Προφίλ", + "email": "Ηλεκτρονική διεύθυνση (E-Mail)", + "passwordResetNotice": "Μετά την αλλαγή του κωδικού σου, θα αποσυνδεθείς από όλες τις συσκευές.", + "removeDiscord": "Αφαίρεση λογαριασμού Discord", + "connectedToDiscord": "Συνδεδεμένος στο Discord ως", + "noDiscordLinked": "Δεν υπάρχει συνδεδεμένος λογαριασμός Discord", + "linkDiscord": "Σύνδεση λογαριασμού Discord" + }, + "unavailable": "Μη διαθέσιμο", + "upgrade": "Αναβάθμιση λογαριασμού" + }, + "loginForm": { + "detailsPrompt": "Συμπλήρωσε τα στοιχεία του λογαριασμού παρακάτω", + "forgotPassword": "Ξέχασες τον κωδικό σου;", + "login": "Σύνδεση", + "register": "Εγγραφή", + "username": "Όνομα χρήστη", + "password": "Κωδικός", + "confirmPassword": "Επιβεβαίωση κωδικού", + "email": "Ηλεκτρονική διέυθυνση (E-Mail)", + "registerPrompt": "Δεν έχεις λογαριασμό;", + "miiName": "Όνομα Mii", + "loginPrompt": "Έχεις ήδη λογαριασμό;" + }, + "resetPassword": { + "sub": "Συμπλήρωσε παρακάτω το νέο κωδικό σου", + "header": "Επαναφορά Κωδικού", + "password": "Κωδικός", + "confirmPassword": "Επιβεβαίωση κωδικού", + "submit": "Υποβολή" + }, + "forgotPassword": { + "input": "Ηλεκτρονική διεύθυνση (E-Mail) ή PNID", + "sub": "Συμπλήρωσε παρακάτω τη διεύθυνση Email/PNID", + "submit": "Υποβολή", + "header": "Ξέχασα τον κωδικό μου" + }, + "account": "Λογαριασμός", + "accountLevel": [ + "Τυπικό", + "Δοκιμαστής", + "Επόπτης", + "Προγραμματιστής" + ], + "banned": "Αποκλεισμένος" + }, + "credits": { + "text": "Γνώρισε την ομάδα που αναπτύσσει το project", + "title": "Η ομάδα", + "people": [ + { + "caption": "Ιδιοκτήτης του έργου και κύριος προγραμματιστής" + } + ] + }, + "discordJoin": { + "text": "Μπές στον Discord server μας για να λαμβάνεις τις νεότερες ενημερώσεις μας πάνω στο project.", + "widget": { + "text": "Λάβε ενημερώσεις ζωντανού χρόνου για την πρόοδο μας", + "button": "Μπες στο server" + }, + "title": "Μείνε ενήμερος" + }, + "footer": { + "widget": { + "captions": [ + "Θες να μένεις ενημερωμένος;", + "Γίνε μέλος του Discord server μας!" + ], + "button": "Γίνε μέλος!" + }, + "bandwidthRaccoonQuotes": [ + "Είμαι ο Bandwidth το ρακούν και μου αρέσει να δαγκώνω τα καλώδια που συνδέονται στους servers του Pretendo Network. Μιαμ!", + "Πολλοί μας ρωτούν αν θα έχουμε νομικά προβλήματα με τη Nintendo με όλο αυτό, οπότε είμαι στην ευχάριστη θέση να σας πω ότι η θεία μου εργάζεται στη Nintendo και λέει ότι δεν υπάρχει πρόβλημα.", + "Το Webkit v537 είναι η καλύτερη εκδοχή του Webkit για το Wii U. Όχι, δεν θα φέρουμε το Chrome στο Wii U.", + "Ανυπομονώ το ρολόι να πάει στις 03:14:08 Συντονισμένης Παγκόσμιας Ώρας στις 19 Ιανουαρίου του 2038!", + "Το Wii U είναι πραγματικά μια υποτιμημένη κονσόλα: Οι διαφημίσεις του ήταν πολύ κακές, αλλά η ίδια κονσόλα ήταν τέλεια. Χμ, περίμενε ένα δευτερόλεπτο, δεν είμαι σίγουρος γιατί, αλλά το Gamepad μου δεν συνδέεται στο Wii μου.", + "Το main theme του Super Mario World 2 - Yoshi's Island είναι ό,τι καλυτερο και δεν μεταπείθεις με την καμία.", + "Οι αγαπημένες μου κυκλοφορίες του Nintendo Switch είναι το Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pack, και Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Σου Αρεσε Πολύ Το Χ Παιχνίδι Wii U Virtual Console , Οπότε Το Φέρνουμε Πίσω\" Pack. Είναι προφανές πως η Nintendo ενδιαφέρεται.", + "Ήξερες ότι το \"Ξέρεις ότι η Ash, νά' ναι καλά η ψυχούλα, κάνει όλη μέρα UwU\" είναι ο ευγενικός τρόπος να πείς \"Η Ash κάνει UwU συνέχεια και είναι περίεργο και χαζό και μακάρι να μην το έκανε;\"", + "Το πρώτο βίντεω στο κανάλι μου!! περίμενα να κάνω βίντεος για πολι καιρό αλλά το λαπτοπ μου ετρεθε πολυ κακά και δεν μπορουσα να τρεχω το fraps, skype κι minecraft ολα μαζι. αλλα αυτο τελιωσε! με λιγο βοηθεια απο το δασκαλο πληροφορικισ μου το λαπτ0π μου τρεχι πολυ καλυτερα και μπορο να καταγράψω τορα! ευχομαι να το απολαυσετε και αν ναι, παρ@καλο καντε λαεκ και σαμπσκραϊμπ!" + ], + "socials": "Κοινωνικά δίκτυα", + "usefulLinks": "Χρήσιμοι σύνδεσμοι" + }, + "blogPage": { + "title": "Blog", + "description": "Οι τελευταίες ενημερώσεις μας συνοπτικά. Αν επιθυμείς να βλέπεις συχνότερες ενημερώσεις, μπορείς να μας υποστηρίξεις.", + "published": "Δημοσιευμένο από", + "publishedOn": "στις" + }, + "upgrade": { + "description": "Η επίτευξη του μηνιαίου στόχου θα καταστήσει το Pretendo μια εργασία πλήρους απασχόλησης, παρέχοντας ενημερώσεις καλύτερης ποιότητας με ταχύτερο ρυθμό.", + "month": "μήνα", + "unsubConfirm": "Κατάργηση", + "changeTierConfirm": "Αλλαγή κατηγορίας", + "back": "Πίσω", + "tierSelectPrompt": "Διάλεξε μια κατηγορία", + "title": "Αναβάθμιση", + "unsub": "Κατάργηση συνδρομής", + "unsubPrompt": "Είσαι σίγουρος ότι θέλεις να καταργήσεις τη συνδρομή σου από tiername; Θα χάσεις πρόσβαση σε όλα τα οφέλη που προσφέρονται σε αυτή τη κατηγορία.", + "changeTier": "Αλλαγή κατηγορίας", + "changeTierPrompt": "Είσαι σίγουρος ότι θέλεις να καταργήσεις τη συνδρομή σου από oldtiername και να εγγραφείς στο newtiername;" + }, + "donation": { + "progress": "$${totd} από$${goald}/μήνα, ${perc}% του μηνιαίου στόχου.", + "upgradePush": "Για να γίνεις συνδρομητής και να αποκτήσεις πρόσβαση σε κούλ οφέλη, επισκέψου την σελίδα αναβάθμισης." + }, + "localizationPage": { + "description": "Επικόλλησε έναν σύνδεσμο σε μια δημόσια προσβάσιμη τοποθεσία JSON για να τη δοκιμάσεις στον ιστότοπο", + "fileInput": "Αρχείο προς δοκιμή", + "button": "Δοκιμαστικό αρχείο", + "filePlaceholder": "https://a.link.to/the_file.json", + "title": "Ας μεταφράσουμε", + "instructions": "Δες οδηγίες μετάφρασης" + }, + "docs": { + "quickLinks": { + "links": [ + { + "header": "Εγκατάσταση του Pretendo", + "caption": "Δες τις οδηγίες προετοιμασίας" + }, + { + "header": "Έλαβες σφάλμα;", + "caption": "Αναζήτησε το εδώ" + } + ], + "header": "Γρήγοροι σύνδεσμοι" + }, + "missingInLocale": "Η σελίδα είναι μη διαθέσιμη στη τοπική γλώσσα σου. Παρακαλώ δές την Αγγλική εκδοχή.", + "search": { + "caption": "Συμπλήρωσε το στο κουτί παρακάτω για να βρεις πληροφορίες για το πρόβλημα σου!", + "no_match": "Δεν βρέθηκαν αποτελέσματα", + "title": "Έλαβες κωδικό σφάλματος;", + "label": "Κωδικός σφάλματος" + }, + "sidebar": { + "install_extended": "Εγκατάσταση του Pretendo", + "install": "Εγκατάσταση", + "search": "Αναζήτηση", + "welcome": "Καλωσόρισες", + "getting_started": "Ξεκινώντας", + "juxt_err": "Κωδικοί σφάλματος - Juxt" + } + }, + "showcase": { + "text": "Το project μας έχει πολλές πτυχές. Εδώ είναι μερικές από αυτές.", + "cards": [ + { + "title": "Servers παιχνιδιών", + "caption": "Επαναφέρουμε τα αγαπημένα σου παιχνίδια και το περιεχόμενο τους μέσω custom servers." + }, + { + "title": "Juxtaposition", + "caption": "Μια μοντέρνα επανεφεύρεση του Miiverse" + }, + { + "caption": "Παίξε τα αγαπημένα σου παιχνίδια από το Wii U ακόμα και χωρίς κονσόλα!", + "title": "Υποστήριξη Cemu" + } + ], + "title": "Τι δημιουργούμε" + }, + "progressPage": { + "description": "Τσέκαρε την πρόοδο και τους στόχους του project! (Ενημερώνεται κάθε μία ώρα περίπου, δεν αντικατοπτρίζει ΟΛΟΥΣ τους στόχους ή την πρόοδο του έργου)", + "title": "Η πρόοδος μας" + }, + "modals": { + "cancel": "Ακύρωση", + "close": "Κλείσιμο", + "confirm": "Επιβεβαίωση" } } diff --git a/locales/en@uwu.json b/locales/en@uwu.json index 386a5fd..7df6d8e 100644 --- a/locales/en@uwu.json +++ b/locales/en@uwu.json @@ -14,7 +14,7 @@ "captions": { "credits": "see kittehs", "about": "seez infomations", - "faq": "frekuent questionz askd", + "faq": "frekuentwy askud kweshtunz", "progress": "see projekt progrez", "blog": "new thingzz, but smol" } @@ -31,9 +31,9 @@ "text": "pretender iz fre an sethru replazement 4 meanie netwrk's servrs for thre d s an wee yu, letin you plae gaems aftr dey leav" }, "aboutUs": { - "title": "whut doez it do?!!?!!?!", + "title": "whut doez whee due?!!?!!?!", "paragraphs": [ - "pretender iz a sethru projekt 4 makin zombiz of teh thre d s an wee yu onlien wif shinie lookinz", + "pretender iz a sethru projekt 4 makin zombiz of teh thre d s an wee yu onlien wif shinie lookinz.", "bcuz it iz fre an sethru, it livez forevahh!!" ] }, @@ -54,27 +54,39 @@ }, { "question": "how doez kitteh use pretender??", - "answer": "pretender iz only 4 kittehz wif subzcription!! soemtimez pretender haz open betaz 4 u tho! wil be fre latr." + "answer": "yey!! get startd wif pretender be readng instructionzzz!!" }, { "question": "eta wen 4 gaem??", "answer": "gud question. kitteh haz no idea!! multiple kittehs be workin on stuffs." }, + { + "question": "eta wen 4 gaem??", + "answer": "pretender workz on gaem when librari cn hold it, w_w dey maek gaem STABEL b4 addin new gaem! nuu ETA!!!!" + }, + { + "question": "doez faek gaemr cod3 enough for pretender?", + "answer": "naaaaa! 4 da safe-t n secur1-t da emelater gamerz n33d da real gamerz system ;3 dis is to smack if no u foll0w DA RULEZ!" + }, { "question": "doez pretender work on me faek gaemr!?", - "answer": "yez! anythin that workz wif meanie netwrk workz wif pretender. only cemu haz it tho rite now!" + "answer": "da C-EMU workz wif da pretender in s-..\"settingz\"? dey have da l33t guide, go read dat~
sum 3 dee ess gamurz might w3rk, but kitteh not suer!!! citra no worky :(" + }, + { + "question": "can kitteh gaem on othr kitteh gaemin??", + "answer": "nonO!! kitteh can only gaem on teh wee yu an thre d s! wee has wiimmfi tho!!" + }, + { + "question": "doez kitteh need hax to gaem?!", + "answer": "yez!! kitteh needz hax to gaem. mak sure kitteh press alt f4 4 epik gaemin!!" }, { "question": "if kitteh ban'd from teh meanie netwrk, iz still ban'd on pretender?", "answer": "no!! yu is not ban'd! ther is rulez tho, so yu can stil get bananad!!" }, { - "question": "can kitteh gaem on othr kitteh gaemin??", - "answer": "nonO!! kitteh can only gaem on teh wee yu an thre d s! wee has wiimmfi tho!!" - }, - { - "question": "doez kitteh need hax to gaem?!", - "answer": "yez!! kitteh needz hax to gaem. mak sure kitteh press alt f4 4 epik gaemin!!" + "question": "can kitteh cheat on pretender gamez?", + "answer": "only wid friend, but cheat no fair for other kitteh, want ban?" } ], "text": "herez sum questionz yu lik 2 ask!!" @@ -99,11 +111,172 @@ }, "credits": { "title": "dev kittehs", - "text": "see kittehz who maek pretender!!" + "text": "see kittehz who maek pretender!!", + "people": [ + { + "caption": "da big cheez", + "name": "jon pretender", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow" + }, + { + "caption": "miiveres kitteh!", + "name": "jem :3", + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat" + }, + { + "caption": "wii u foxish!!!!!", + "name": "lucakitteh!! ^^", + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky" + }, + { + "caption": "rezearch kitteh", + "name": "supah marioh da vroom", + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom" + }, + { + "caption": "onlien kitteh ^w^", + "name": "purple lemonzz :3", + "picture": "https://github.com/gitlimes.png", + "github": "https://github.com/gitlimes" + }, + { + "caption": "servah debeloper kitteh!!!", + "name": "camera creature 2k!!!!", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000" + }, + { + "caption": "gaem history saveh kiteh,,", + "name": "billeh!", + "picture": "https://github.com/InternalLoss.png", + "github": "https://github.com/InternalLoss" + }, + { + "caption": "server dev kitteh o.o", + "name": "daneh zappy...", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra" + }, + { + "caption": "website servah kitteh!! ^^", + "name": "og kitteh!!!!", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "caption": "deb..ops..? kitteh!", + "name": "matteh", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "caption": "servah kitteh n speedi kitteh!", + "name": "wolfiiii! ^^", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "caption": "duel screeh reseacha!!", + "name": "traceh bored >:(", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" + } + ] }, "specialThanks": { "title": "speshul thx", - "text": "theze kittehs helpd!!" + "text": "theze kittehs helpd!!", + "people": [ + { + "name": "geethub contrwibutahs!!!!! uwu", + "caption": "wocawizawitwions n moar!!!!", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "caption": "crunchii libwrary dev!!!", + "name": "uber whiskahs!!!!! (superwhiskers)", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers" + }, + { + "caption": "duel scweeen debeprobah and pachket takher-apahter!", + "name": "staweh :3 (Stary)", + "picture": "https://github.com/Stary2001.png", + "github": "https://github.com/Stary2001" + }, + { + "caption": "we steal their code :3", + "name": "green juxt!", + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub" + }, + { + "special": "speshul thx", + "caption": "gawd of meanine weseawch!!!!", + "name": "kinneh!", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay" + }, + { + "caption": "icwn designah!!!!", + "name": "ninstah! ^w^", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "caption": "gaem reseawchhh n dev!", + "name": "rambeh >:3", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12" + }, + { + "caption": "wiiuu pwatchy hacky! ^w^", + "name": "gary (cool one!)", + "picture": "https://github.com/GaryOderNichts.png", + "github": "https://github.com/GaryOderNichts" + }, + { + "caption": "duaaalsccween haxorz!!!! owo", + "name": "zak is da 3ds beast", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast" + }, + { + "caption": "servah maker!!! ^u^", + "name": "jvkitteh fr", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "caption": "g-gopah??? gopah??????", + "name": "binareh mcbinareh ^w^", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload" + }, + { + "caption": "splooner!", + "name": "slimon!!!", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "caption": "splooner,,,", + "name": "porridge creature :3", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome" + }, + { + "name": "gwitwub fwends!!", + "caption": "dey maek langwage gud u.u", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + } + ] }, "discordJoin": { "text": "entr de discord for new infoz from kittehs 4 pretender!!", @@ -132,7 +305,8 @@ "sooper maro wurld too - yoshees is land's theme is amazng!!", "meh favorit nontendo swatch releses hav ben nontendo swatch onlien + expanshun pak, nontendo swatch onlien + rumbly pak, nontendo swatch online + oflin pley pak, nontendo swatch onlin + yet anotha port pak, an nontendo swatch onlin + bren smert trainin pak. yu kan rely tel nontendo kares.", "liek, \"yu kno ash, bles her heawt, she uwus all day\" is the sothern nice wae of sayin \"ash uwus all teh tiem and its realy weird an stupid an i wish they didnt\"", - "Connection terminated. I'm sorry to interrupt you, Elizabeth, if you still even remember that name, But I'm afraid you've been misinformed. You are not here to receive a gift, nor have you been called here by the individual you assume, although, you have indeed been called. You have all been called here, into a labyrinth of sounds and smells, misdirection and misfortune. A labyrinth with no exit, a maze with no prize. You don't even realize that you are trapped. Your lust for blood has driven you in endless circles, chasing the cries of children in some unseen chamber, always seeming so near, yet somehow out of reach, but you will never find them. None of you will. This is where your story ends. And to you, my brave volunteer, who somehow found this job listing not intended for you, although there was a way out planned for you, I have a feeling that's not what you want. I have a feeling that you are right where you want to be. I am remaining as well. I am nearby. This place will not be remembered, and the memory of everything that started this can finally begin to fade away. As the agony of every tragedy should. And to you monsters trapped in the corridors, be still and give up your spirits. They don't belong to you. For most of you, I believe there is peace and perhaps more waiting for you after the smoke clears. Although, for one of you, the darkest pit of Hell has opened to swallow you whole, so don't keep the devil waiting, old friend. My daughter, if you can hear me, I knew you would return as well. It's in your nature to protect the innocent. I'm sorry that on that day, the day you were shut out and left to die, no one was there to lift you up into their arms the way you lifted others into yours, and then, what became of you. I should have known you wouldn't be content to disappear, not my daughter. I couldn't save you then, so let me save you now. It's time to rest - for you, and for those you have carried in your arms. This ends for all of us. End communication." + "Connection terminated. I'm sorry to interrupt you, Elizabeth, if you still even remember that name, But I'm afraid you've been misinformed. You are not here to receive a gift, nor have you been called here by the individual you assume, although, you have indeed been called. You have all been called here, into a labyrinth of sounds and smells, misdirection and misfortune. A labyrinth with no exit, a maze with no prize. You don't even realize that you are trapped. Your lust for blood has driven you in endless circles, chasing the cries of children in some unseen chamber, always seeming so near, yet somehow out of reach, but you will never find them. None of you will. This is where your story ends. And to you, my brave volunteer, who somehow found this job listing not intended for you, although there was a way out planned for you, I have a feeling that's not what you want. I have a feeling that you are right where you want to be. I am remaining as well. I am nearby. This place will not be remembered, and the memory of everything that started this can finally begin to fade away. As the agony of every tragedy should. And to you monsters trapped in the corridors, be still and give up your spirits. They don't belong to you. For most of you, I believe there is peace and perhaps more waiting for you after the smoke clears. Although, for one of you, the darkest pit of Hell has opened to swallow you whole, so don't keep the devil waiting, old friend. My daughter, if you can hear me, I knew you would return as well. It's in your nature to protect the innocent. I'm sorry that on that day, the day you were shut out and left to die, no one was there to lift you up into their arms the way you lifted others into yours, and then, what became of you. I should have known you wouldn't be content to disappear, not my daughter. I couldn't save you then, so let me save you now. It's time to rest - for you, and for those you have carried in your arms. This ends for all of us. End communication.", + "awooooooooooooooooooooooooooooooooooooooooooooo!" ] }, "progressPage": { @@ -186,8 +360,6 @@ "no_signins_notice": "kitteh is not watchin logins... i wil latr!!", "no_edit_from_dashboard": "changin yor kitteh opshuns from interwebs is nono!! do from yor konsole." }, - "downloadFiles": "downlod kitteh datas", - "downloadFilesDescription": "(kitteh datas wil not work on meanie netwrk!!)", "unavailable": "no :(", "upgrade": "become super kitteh" }, @@ -222,7 +394,7 @@ "unsub": "stop being super kitteh :(", "description": "reachin goal givez kittehz muns for devin, gettin better new stuffz fastr!!", "back": "bak", - "unsubPrompt": "are u sur u wanna stop bein tiername?! u will lose all kitteh perkz instantly!!", + "unsubPrompt": "are u sur u wanna stop bein tiername?! u will lose all kitteh perkz immediately!!", "changeTier": "change super kitteh level", "changeTierConfirm": "yezyez, change!!" }, @@ -278,5 +450,8 @@ "donation": { "progress": "$${totd} of $${goald}/munth, ${perc}% of teh monthly goal", "upgradePush": "u wanna become super kitteh and get kool perkz?? upgrade now!!" + }, + "notfound": { + "description": "uh oh! we did a widdle fucky wucky! oopsie daisie! oh noes!!!!!" } } diff --git a/locales/en_GB.json b/locales/en_GB.json index cef0271..04c6306 100644 --- a/locales/en_GB.json +++ b/locales/en_GB.json @@ -34,7 +34,7 @@ "title": "About us", "paragraphs": [ "Pretendo is an open-source project that aims to recreate Nintendo Network for the 3DS and Wii U using clean-room reverse engineering.", - "As our services would be both free and open source, they can exist long after the inevitable closure of Nintendo Network." + "Since our services are free and open source, they will exist long into the future." ] }, "progress": { @@ -55,19 +55,23 @@ }, { "question": "How do I use Pretendo?", - "answer": "Pretendo is currently not in a state that is ready for public use. However, once it is, you will be able to use Pretendo simply by running our homebrew patcher on your console." + "answer": "To get started with Pretendo Network on 3DS, Wii U or emulators, please see our setup instructions!" }, { "question": "Do you know when feature/service will be ready?", "answer": "No. Lots of Pretendo's features/services are developed independently (for example, Miiverse may be worked on by one developer while Accounts and Friends is being worked on by another) and therefore we cannot give an overall ETA for how long this will take." }, { - "question": "Does Pretendo work on Cemu/emulators?", - "answer": "Pretendo supports any client that can interact with Nintendo Network. Currently, the only emulator with this kind of functionality is Cemu. Cemu 2.0 officially supports Pretendo under your network account options in the emulator. For information on how to get started with Cemu, check out the documentation.
Citra does not support true online play and thus does not work with Pretendo, and does not show signs of supporting true online play at all. Mikage, a 3DS emulator for PC and mobile devices, may provide support in the future, though this is far from certain." + "question": "When will you add more games?", + "answer": "We work on new games once we feel that our backend libraries are ready to support it, and there is developer time available to maintain it. A lot of our work goes into stabilising and completing our existing games - we want to get the best experience possible in those before we move on to new titles. Since new work comes up all the time, we cannot make any estimate of when that would be." }, { - "question": "If I am banned on Nintendo Network, will I stay banned when using Pretendo?", - "answer": "We will not have access to Nintendo Network's bans, and all users will not be banned on our service. However, we will have rules to follow when using the service and failing to follow these rules could result in a ban." + "question": "If I use an emulator, will that be enough to use Pretendo?", + "answer": "No. For purposes of security and moderation, if you are using an emulator, you still need a real console. This allows for improved security and more effective enforcement of rules in order to provide a safe and enjoyable experience with our service." + }, + { + "question": "Does Pretendo work on Cemu/emulators?", + "answer": "Cemu 2.1 officially supports Pretendo under your network account options in the emulator. For information on how to get started with Cemu, check out the documentation.
Some 3DS emulators or forks might support us, but we do not have any official recommendation or setup instructions at this time. The final builds of Citra do not support Pretendo." }, { "question": "Will Pretendo support the Wii/Switch?", @@ -75,7 +79,15 @@ }, { "question": "Will I need hacks to connect?", - "answer": "Yes, you will need to hack your device to connect; however, on the Wii U, you will only need access to the Homebrew Launcher (i.e. Tiramisu, Aroma, or even the web browser exploit), with info on how the 3DS will connect coming at a later date." + "answer": "For the best experience on consoles, you will need to hack your system - specifically Aroma for Wii U and Luma3DS for 3DS. However, on Wii U, the hackless SSSL method is also available with limited functionality. See our setup instructions for details." + }, + { + "question": "If I am banned on Nintendo Network, will I stay banned when using Pretendo?", + "answer": "We do not have access to Nintendo Network's bans, so all Nintendo Network users are not banned. However, we have rules to follow when using the service and failing to follow these rules could result in a ban." + }, + { + "question": "Can I use cheats or mods online with Pretendo?", + "answer": "Only in private matches - gaining an unfair advantage or disrupting the online experience with people who didn't consent (as in public matches) is a bannable offence. We regularly apply account and console bans to both Wii U and 3DS systems. Pretendo uses extra security measures that make traditional 'unban' methods like changing your serial number ineffective." } ] }, @@ -99,11 +111,172 @@ }, "credits": { "title": "The team", - "text": "Meet the team behind the project" + "text": "Meet the team behind the project", + "people": [ + { + "name": "Jonathan Barrow (jonbarrow)", + "caption": "Project owner and lead developer", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow" + }, + { + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat", + "name": "Jemma (CaramelKat)", + "caption": "Miiverse research and development" + }, + { + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "caption": "Wii U research and patch development", + "name": "quarky" + }, + { + "name": "SuperMarioDaBom", + "github": "https://github.com/SuperMarioDaBom", + "caption": "Systems research and server architecture", + "picture": "https://github.com/supermariodabom.png" + }, + { + "name": "pinklimes", + "caption": "Web development", + "picture": "https://github.com/gitlimes.png", + "github": "https://github.com/gitlimes" + }, + { + "github": "https://github.com/shutterbug2000", + "name": "Shutterbug2000", + "caption": "Systems research and server development", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128" + }, + { + "name": "Billy", + "caption": "Preservationist and server architecture", + "picture": "https://github.com/InternalLoss.png", + "github": "https://github.com/InternalLoss" + }, + { + "caption": "Systems research and server development", + "picture": "https://github.com/danielectra.png", + "name": "DaniElectra", + "github": "https://github.com/DaniElectra" + }, + { + "name": "niko", + "caption": "Web and server development", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246", + "name": "MatthewL246", + "caption": "DevOps and community work" + }, + { + "name": "wolfendale", + "caption": "Server development and optimisation", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "3DS patch development and research", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" + } + ] }, "specialThanks": { "title": "Special thanks", - "text": "Without these people. Pretendo wouldn't be where it is today." + "text": "Without these people. Pretendo wouldn't be where it is today.", + "people": [ + { + "name": "GitHub contributors", + "caption": "Localisations and other contributions", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "github": "https://github.com/superwhiskers", + "name": "superwhiskers", + "caption": "crunch library development", + "picture": "https://github.com/superwhiskers.png" + }, + { + "caption": "3DS development and NEX dissector", + "picture": "https://github.com/Stary2001.png", + "github": "https://github.com/Stary2001", + "name": "Stary" + }, + { + "github": "https://twitter.com/rverseClub", + "name": "rverse", + "caption": "Miiverse information sharing", + "picture": "https://github.com/rverseTeam.png" + }, + { + "caption": "Research on Nintendo datastructures", + "name": "Kinnay", + "special": "Special thanks", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay" + }, + { + "name": "NinStar", + "caption": "Icons for the Mii Editor and Juxt reactions", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "name": "Rambo6Glaz", + "caption": "Console research and game servers", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12" + }, + { + "caption": "Wii U patch development", + "picture": "https://github.com/GaryOderNichts.png", + "name": "GaryOderNichts", + "github": "https://github.com/GaryOderNichts" + }, + { + "name": "zaksabeast", + "caption": "3DS patch creator", + "github": "https://github.com/zaksabeast", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128" + }, + { + "name": "mrjvs", + "caption": "Server architecture", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "caption": "Server architecture", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload", + "name": "binaryoverload" + }, + { + "name": "Simonx22", + "caption": "Splatoon rotations and research", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "caption": "Splatoon rotations and research", + "picture": "https://github.com/OatmealDome.png", + "name": "OatmealDome", + "github": "https://github.com/OatmealDome" + }, + { + "name": "GitHub contributors", + "caption": "Localizations and other contributions", + "github": "https://github.com/PretendoNetwork", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" + } + ] }, "discordJoin": { "title": "Stay up to date", @@ -132,7 +305,8 @@ "Super Mario World 2 - Yoshi's Island's main theme is an absolute bop and there's no way you're going to convince me otherwise.", "My favourite Nintendo Switch releases have been Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pak, and Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \" You Really Liked The Nintendo Wii U Virtual Console Title, So We're Bringing It Back\" Pack. You can really tell Nintendo cares.", "Like \"You know Ash, bless their heart, they UwU all day\" is the southern nice way of saying \"Ash UwUs all the time and it's really weird and stupid and I wish they didn't\"", - "My first video on my channel!! iv been wanting to make videos for a long time now but my laptop ran pretty bad and i couldn't run fraps, skype and minecraft all at once. but now thats over! with some help from my IT teacher my laptop runs alot better and i can record now! i hope y'all enjoy and if you do please like and subscribe!!!" + "My first video on my channel!! iv been wanting to make videos for a long time now but my laptop ran pretty bad and i couldn't run fraps, skype and minecraft all at once. but now thats over! with some help from my IT teacher my laptop runs alot better and i can record now! i hope y'all enjoy and if you do please like and subscribe!!!", + "Looks Good To Me" ] }, "progressPage": { @@ -174,8 +348,6 @@ "password": "Password" }, "settings": { - "downloadFiles": "Download account files", - "downloadFilesDescription": "(will not work on Nintendo Network)", "upgrade": "Upgrade account", "unavailable": "Unavailable", "settingCards": { @@ -228,7 +400,7 @@ "description": "Reaching the monthly goal will make Pretendo a full time job, providing better quality updates at a faster rate.", "month": "month", "tierSelectPrompt": "Select a tier", - "unsubPrompt": "Are you sure you want to unsubscribe from tiername? You will lose access to the perks associated with that tier.", + "unsubPrompt": "Are you sure you want to unsubscribe from tiername? You will immediately lose access to the perks associated with that tier.", "changeTier": "Change tier", "changeTierPrompt": "Are you sure you want to unsubscribe from oldtiername and subscribe to newtiername?" }, @@ -278,5 +450,8 @@ "cancel": "Cancel", "confirm": "Confirm", "close": "Close" + }, + "notfound": { + "description": "Oops! We could not find this page." } } diff --git a/locales/en_US.json b/locales/en_US.json index 5ad0fe9..0ba6b86 100644 --- a/locales/en_US.json +++ b/locales/en_US.json @@ -34,7 +34,7 @@ "title": "About us", "paragraphs": [ "Pretendo is an open-source project that aims to recreate Nintendo Network for the 3DS and Wii U using clean-room reverse engineering.", - "As our services would be both free and open source, they can exist long after the inevitable closure of Nintendo Network." + "Since our services are free and open source, they will exist long into the future." ] }, "progress": { @@ -55,19 +55,23 @@ }, { "question": "How do I use Pretendo?", - "answer": "Pretendo is currently not in a state that is ready for public use. However, once it is you will be able to use Pretendo simply by running our homebrew patcher on your console." + "answer": "To get started with Pretendo Network on 3DS, Wii U or emulators, please see our setup instructions!" }, { "question": "Do you know when feature/service will be ready?", "answer": "No. Lots of Pretendo's features/services are developed independently (for example, Miiverse may be worked on by one developer while Accounts and Friends is being worked on by another) and therefore we cannot give an overall ETA for how long this will take." }, { - "question": "Does Pretendo work on Cemu/emulators?", - "answer": "Pretendo supports any client that can interact with Nintendo Network. Currently the only emulator with this kind of functionality is Cemu. Cemu 2.0 officially supports Pretendo under your network account options in the emulator. For information on how to get started with Cemu, check out the documentation.
Citra does not support true online play and thus does not work with Pretendo, and does not show signs of supporting true online play at all. Mikage, a 3DS emulator for mobile devices, may provide support in the future though this is far from certain." + "question": "When will you add more games?", + "answer": "We work on new games once we feel that our backend libraries are ready to support it, and there is developer time available to maintain it. A lot of our work goes into stabilizing and completing our existing games - we want to get the best experience possible in those before we move on to new titles. Since new work comes up all the time, we cannot make any estimate of when that would be." }, { - "question": "If I am banned on Nintendo Network, will I stay banned when using Pretendo?", - "answer": "We will not have access to Nintendo Network's bans, and all users will not be banned on our service. However, we will have rules to follow when using the service and failing to follow these rules could result in a ban." + "question": "If I use an emulator, will that be enough to use Pretendo?", + "answer": "No. For purposes of security and moderation, if you are using an emulator, you still need a real console. This allows for improved security and more effective enforcement of rules in order to provide a safe and enjoyable experience with our service." + }, + { + "question": "Does Pretendo work on Cemu/emulators?", + "answer": "Cemu 2.1 officially supports Pretendo under your network account options in the emulator. For information on how to get started with Cemu, check out the documentation.
Some 3DS emulators or forks might support us, but we do not have any official recommendation or setup instructions at this time. The final builds of Citra do not support Pretendo." }, { "question": "Will Pretendo support the Wii/Switch?", @@ -75,7 +79,15 @@ }, { "question": "Will I need hacks to connect?", - "answer": "Yes, you will need to hack your device to connect; however, on Wii U you will only need access to the Homebrew Launcher (i.e. Haxchi, Coldboot Haxchi, or even the web browser exploit), with info on how the 3DS will connect coming at a later date." + "answer": "For the best experience on consoles, you will need to hack your system - specifially Aroma for Wii U and Luma3DS for 3DS. However, on Wii U, the hackless SSSL method is also available with limited functionality. See our setup instructions for details." + }, + { + "question": "If I am banned on Nintendo Network, will I stay banned when using Pretendo?", + "answer": "We do not have access to Nintendo Network's bans, so all Nintendo Network users are not banned. However, we have rules to follow when using the service and failing to follow these rules could result in a ban." + }, + { + "question": "Can I use cheats or mods online with Pretendo?", + "answer": "Only in private matches - gaining an unfair advantage or disrupting the online experience with people who didn't consent (as in public matches) is a bannable offense. We regularly apply account and console bans to both Wii U and 3DS systems. Pretendo uses extra security measures that make traditional 'unban' methods like changing your serial number ineffective." } ] }, @@ -154,6 +166,24 @@ "caption": "Web and server development", "picture": "https://github.com/hauntii.png", "github": "https://github.com/hauntii" + }, + { + "name": "MatthewL246", + "caption": "DevOps and community work", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "name": "wolfendale", + "caption": "Server development and optimization", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "3DS patch development and research", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" } ] }, @@ -175,7 +205,7 @@ }, { "name": "Stary", - "caption": "3DS dev and NEX dissector", + "caption": "3DS development and NEX dissector", "picture": "https://github.com/Stary2001.png", "github": "https://github.com/Stary2001" }, @@ -200,7 +230,7 @@ }, { "name": "Rambo6Glaz", - "caption": "Network installer and console research", + "caption": "Console research and game servers", "picture": "https://github.com/EpicUsername12.png", "github": "https://github.com/EpicUsername12" }, @@ -215,6 +245,36 @@ "caption": "3DS patch creator", "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", "github": "https://github.com/zaksabeast" + }, + { + "name": "mrjvs", + "caption": "Server architecture", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "name": "binaryoverload", + "caption": "Server architecture", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload" + }, + { + "name": "Simonx22", + "caption": "Splatoon rotations and research", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "name": "OatmealDome", + "caption": "Splatoon rotations and research", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome" + }, + { + "name": "GitHub contributors", + "caption": "Localizations and other contributions", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" } ] }, @@ -245,7 +305,8 @@ "Super Mario World 2 - Yoshi's Island's main theme is an absolute bop and there's no way you're gonna convince me otherwise.", "My favorite Nintendo Switch releases have been Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pack, and Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"You Really Liked The Nintendo Wii U Virtual Console Title, So We're Bringing It Back\" Pack. You can really tell Nintendo cares.", "Like \"You know Ash, bless her heart, she UwU’s all day\" is the southern nice way of saying \"Ash uwus all the time and it’s really weird and stupid and I wish they didn't\"", - "My first video on my channel!! iv been wanting to make videos for a long time now but my laptop ran pretty bad and i couldn't run fraps, skype and minecraft all at once. but now thats over! with some help from my IT teacher my laptop runs alot better and i can record now! i hope y'all enjoy and if you do please like and subscribe!!!" + "My first video on my channel!! iv been wanting to make videos for a long time now but my laptop ran pretty bad and i couldn't run fraps, skype and minecraft all at once. but now thats over! with some help from my IT teacher my laptop runs alot better and i can record now! i hope y'all enjoy and if you do please like and subscribe!!!", + "Looks Good To Me" ] }, "progressPage": { @@ -287,8 +348,6 @@ "submit": "Submit" }, "settings": { - "downloadFiles": "Download account files", - "downloadFilesDescription": "(will not work on Nintendo Network)", "upgrade": "Upgrade account", "unavailable": "Unavailable", "settingCards": { @@ -322,6 +381,13 @@ "no_signins_notice": "Sign in history not currently tracked. Check back again later!", "no_newsletter_notice": "Newsletter not currently available. Check back again later", "no_edit_from_dashboard": "Editing PNID settings from user dashboard is currently unavailable. Please update user settings from your linked game console" + }, + "delete": { + "button": "Delete Account", + "modalTitle": "Delete PNID", + "modalDescription": "Are you sure you want to delete your PNID? Your data across services such as the forums, Miiverse, etc. will all be removed. Your Stripe data and subscription will also be automatically deleted.", + "modalCaution": "This action cannot be undone.", + "modalConfirm": "Yes, delete" } }, "accountLevel": [ @@ -338,7 +404,7 @@ "month": "month", "tierSelectPrompt": "Select a tier", "unsub": "Unsubscribe", - "unsubPrompt": "Are you sure you want to unsubscribe from tiername? You will lose access to the perks associated with that tier.", + "unsubPrompt": "Are you sure you want to unsubscribe from tiername? You will immediately lose access to the perks associated with that tier.", "unsubConfirm": "Unsubscribe", "changeTier": "Change tier", "changeTierPrompt": "Are you sure you want to unsubscribe from oldtiername and subscribe to newtiername?", @@ -391,5 +457,8 @@ "cancel": "Cancel", "confirm": "Confirm", "close": "Close" + }, + "notfound": { + "description": "Oops! We could not find this page." } } diff --git a/locales/eo_XX.json b/locales/eo_XX.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/eo_XX.json @@ -0,0 +1 @@ +{} diff --git a/locales/es_ES.json b/locales/es_ES.json index e6d56f1..a55720d 100644 --- a/locales/es_ES.json +++ b/locales/es_ES.json @@ -1,7 +1,7 @@ { "nav": { - "about": "Acerca de", - "faq": "FAQ", + "about": "Acerca de nosotros", + "faq": "Preguntas frecuentes", "docs": "Documentación", "credits": "Créditos", "progress": "Progreso", @@ -9,23 +9,23 @@ "account": "Cuenta", "accountWidget": { "settings": "Ajustes", - "logout": "Cerrar Sesión" + "logout": "Cerrar sesión" }, "donate": "Donar", "dropdown": { "captions": { "credits": "Conoce al equipo", - "about": "Sobre el projecto", - "blog": "Nuestras últimas actualizaciones, resumidas", + "about": "Sobre el proyecto", + "blog": "Un resumen de nuestras últimas actualizaciones", "progress": "Mira el progreso del proyecto y sus metas", - "faq": "Preguntas más preguntadas" + "faq": "Preguntas frecuentes" } } }, "hero": { "subtitle": "Servidores en línea", "title": "Recreados", - "text": "Pretendo es un reemplazamiento gratuito y de código abierto de los servidores de Nintendo para 3DS y Wii U que permite la comunicación en línea incluso después del cierre de los servidores oficiales", + "text": "Pretendo es un reemplazo gratuito y de código abierto de los servidores de Nintendo para 3DS y Wii U que permite la comunicación en línea incluso después del cierre de los servidores oficiales", "buttons": { "readMore": "Leer más" } @@ -34,7 +34,7 @@ "title": "Sobre nosotros", "paragraphs": [ "Pretendo es un proyecto de código abierto que busca recrear Nintendo Network para 3DS y Wii U aplicando ingeniería inversa con un diseño en sala limpia.", - "Como nuestros servicios serán gratuitos y de código abierto, podrán existir tras el inevitable cierre de Nintendo Network." + "Como nuestros servicios serán gratuitos y de código abierto, existirán durante mucho tiempo." ] }, "progress": { @@ -55,33 +55,43 @@ }, { "question": "¿Cómo uso Pretendo?", - "answer": "Pretendo no está actualmente en un estado adecuado para el uso público. Sin embargo, en cuanto esté listo podrás usar Pretendo simplemente cargando nuestro parcheador homebrew en tu consola." + "answer": "Para comenzar a utilizar Pretendo Network en 3DS, Wii U o emuladores, consulta nuestras instrucciones de instalación." }, { "question": "¿Sabéis cuándo determinada función/servicio estará listo/a?", "answer": "No. Muchos/as funciones/servicios de Pretendo son desarrolladas independientemente (por ejemplo, un desarrollador puede estar trabajando en Miiverse mientras otro se encarga de las Cuentas y los Amigos) y, por lo tanto, no podemos dar una ETA exacta de cuánto puede tardar en estar listo." }, + { + "question": "¿Cuándo añadirán más juegos?", + "answer": "Trabajamos en nuevos juegos una vez que sentimos que nuestras bibliotecas de backend están listas para soportarlo, y hay tiempo disponible para mantenerlo. Gran parte de nuestro trabajo se dedica a estabilizar y completar nuestros juegos existentes - queremos obtener la mejor experiencia posible en los mismos antes de pasar a nuevos títulos. Dado que se presentan nuevos trabajos todo el tiempo, no podemos hacer ninguna estimación de cuándo sería esto." + }, + { + "question": "¿Pretendo funciona en Cemu/emuladores? ¿Si uso un emulador, será eso suficiente para usar Pretendo?", + "answer": "No. Para efectos de seguridad y moderación, si usas un emulador, aún necesitas una consola real. Esto permite una mejor seguridad y aplicación más efectiva de reglas, para poder brindar una experiencia segura y placentera con nuestro servicio." + }, { "question": "¿Pretendo funciona en Cemu/emuladores?", - "answer": "Pretendo soporta cualquier cliente que puede interactuar con el Nintendo Network. Hasta ahora, el único emulador con este tipo de funcionalidad es Cemu. Cemu 2.0 oficialmente soporta a Pretendo, en las opciones de cuenta en línea en el emulador . Para obtener más información de cómo empezar con Cemu, revisa la documentación.
Citra no soporta verdadero juego en línea, por eso no funciona con Pretendo, y no demuestra señales de que soportará verdadero juego en linea. Mikage, un emulador de 3DS para dispositivos móviles, podría proporcionar soporte en el futuro aunque esto esta lejos de ser cierto." + "answer": "La Wii ya tiene servidores en línea personalizados por parte de Wiimmfi. No tenemos planeado trabajar con la Switch ya que sus servicios son de pago y completamente diferentes a los de Nintendo Network." }, { - "question": "Si estoy baneado en Nintendo Network, ¿seguiré baneado al usar Pretendo?", - "answer": "No tenemos acceso a los baneos de Nintendo Network motivo por el nadie estará baneado en nuestros servidores al principio. Sin embargo, tendremos reglas a seguir al acceder a nuestros servicios y no hacerlo resultará en un baneo." + "question": "¿Pretendo será compatible con la Wii/Switch?", + "answer": "La Wii ya tiene servidores en línea personalizados por parte de Wiimmfi. No tenemos planeado trabajar con la Switch ya que sus servicios son de pago y completamente diferentes a los de Nintendo Network." }, { - "question": "¿Pretendo soportará Wii/Switch?", - "answer": "La Wii ya tiene servidores en línea personalizados de parte de Wiimmfi. No tenemos planeado trabajar con Switch ya que sus servidores son de pago y completamente diferentes a los de Nintendo Network." + "question": "Si me expulsan en Nintendo Network, ¿seguiré expulsado cuando use Pretendo?" }, { - "question": "¿Necesitaré modificar mi consola para conectarme?", - "answer": "Sí, necesitas modificar tu consola para conectarte. Sin embargo, en Wii U solo necesitas acceso al Homebrew Launcher (p.e. Haxchi, Coldboot Haxchi, o el exploit web). La información sobre como conectarse con una 3DS llegará posteriormente." + "question": "Si se me ha suspendido el acceso a Nintendo Network, ¿se mantendrá el suspenso en Pretendo?", + "answer": "No tenemos acceso a las suspensiones de cuenta de Nintendo Network, entonces todos los usuarios de Nintendo Network no están baneados. Sin embargo, tenemos reglas a seguir al usar el servicio y el incumplimiento de estas reglas puede resultar en una suspensión." + }, + { + "question": "¿Puedo utilizar trucos o modificaciones con Pretendo?" } ] }, "showcase": { "title": "Qué hacemos", - "text": "Nuestro proyecto se compone de muchas cosas. Estas son algunas de ellas.", + "text": "Nuestro proyecto tiene muchos componentes. Estos son algunos de ellos.", "cards": [ { "title": "Servidores de juegos", @@ -89,21 +99,182 @@ }, { "title": "Juxtaposition", - "caption": "Un version re-imaginada de Miiverse, como si hubiera sido creada en la era moderna." + "caption": "Un versión reimaginada de Miiverse, como si hubiera sido creado hoy en día." }, { - "title": "Soporte para Cemu", + "title": "Compatibilidad con Cemu", "caption": "¡Juega a tus títulos de Wii U favoritos incluso sin una consola!" } ] }, "credits": { "title": "Equipo", - "text": "Conoce al equipo tras el proyecto" + "text": "Conoce al equipo tras el proyecto", + "people": [ + { + "name": "Jonathan Barrow (jonbarrow)", + "caption": "Dueño del proyecto y desarrollador principal", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow" + }, + { + "github": "https://github.com/CaramelKat", + "name": "Jemma (CaramelKat)", + "caption": "Investigación y desarrollo de Miiverse", + "picture": "https://github.com/caramelkat.png" + }, + { + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "name": "quarky", + "caption": "Investigación de Wii U y desarrollo de parches" + }, + { + "picture": "https://github.com/supermariodabom.png", + "name": "SuperMarioDaBom", + "caption": "Investigación de sistemas y arquitectura del servidor", + "github": "https://github.com/SuperMarioDaBom" + }, + { + "name": "pinklimes", + "caption": "Desarrollo web", + "picture": "https://github.com/gitlimes.png", + "github": "https://github.com/gitlimes" + }, + { + "name": "Shutterbug2000", + "caption": "Investigación de sistemas y desarrollo del servidor", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000" + }, + { + "github": "https://github.com/InternalLoss", + "caption": "Conservacionista y arquitectura del servidor", + "picture": "https://github.com/InternalLoss.png", + "name": "Billy" + }, + { + "name": "DaniElectra", + "caption": "Investigación de sistemas y desarrollo del servidor", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra" + }, + { + "name": "niko", + "caption": "Desarrollo de web y servidor", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "name": "MatthewL246", + "caption": "DevOps y trabajo comunitario", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "caption": "Desarrollo y optimización de servidor", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale", + "name": "wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "Desarrollo e investigación de parches en 3DS", + "github": "https://github.com/TraceEntertains", + "picture": "https://github.com/TraceEntertains.png" + } + ] }, "specialThanks": { "title": "Agradecimientos especiales", - "text": "Sin ellos, Pretendo no sería lo que es hoy." + "text": "Sin ellos, Pretendo no sería lo que es hoy.", + "people": [ + { + "name": "Contribuidores en GitHub", + "caption": "Traducciones y otras contribuciones", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "picture": "https://github.com/superwhiskers.png", + "name": "superwhiskers", + "github": "https://github.com/superwhiskers", + "caption": "desarrollo de la biblioteca de crunch" + }, + { + "github": "https://github.com/Stary2001", + "caption": "Desarrollo en 3DS y disección en NEX", + "name": "Stary", + "picture": "https://github.com/Stary2001.png" + }, + { + "caption": "Intercambio de información de Miiverse", + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub", + "name": "rverse" + }, + { + "name": "Kinnay", + "caption": "Investigación de estructuras de datos de Nintendo", + "special": "Agradecimientos especiales", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay" + }, + { + "name": "NinStar", + "caption": "Iconos del Editor Mii y reacciones de Juxt", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "name": "Rambo6Glaz", + "caption": "Investigación de consolas y servidores de juegos", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12" + }, + { + "name": "GaryOderNichts", + "caption": "Desarrollo de parches en Wii U", + "picture": "https://github.com/GaryOderNichts.png", + "github": "https://github.com/GaryOderNichts" + }, + { + "name": "zaksabeast", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast", + "caption": "Creador de parches 3DS" + }, + { + "name": "mrjvs", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs", + "caption": "Arquitectura del servidor" + }, + { + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload", + "caption": "Arquitectura del servidor", + "name": "sobrecargabinaria" + }, + { + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22", + "name": "Simonx22", + "caption": "Rotaciones de Splatoon e investigación" + }, + { + "name": "OatmealDome", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome", + "caption": "Rotaciones de Splatoon e investigación" + }, + { + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork", + "caption": "Traducciones y otras contribuciones", + "name": "Contribuidores de GitHub" + } + ] }, "discordJoin": { "title": "Mantente al día", @@ -125,18 +296,19 @@ }, "bandwidthRaccoonQuotes": [ "Soy Bandwidth el Mapache y me encanta morder los cables que van a los servidores de Pretendo Network. ¡mmm!", - "Muchas personas nos preguntan si podríamos tener problemas legales con Nintendo por esto; pues me alegro de anunciar que mi tía trabaja en Nintendo y me dijo que no pasa nada.", + "Muchas personas nos preguntan si podríamos tener problemas legales con Nintendo por esto. Me alegra anunciar que mi tía trabaja en Nintendo y me dijo que no pasaba nada.", "Webkit v537 es la mejor versión de Webkit para la Wii U. No, no vamos a portear Chrome a la Wii U", "¡No puedo esperar a que el reloj llegue a la 03:14:08 UTC el 19 de enero de 2038!", "La Wii U es en realidad un sistema subestimado: los comerciales eran realmente malos, pero la consola es genial. Eh, espera un segundo, no estoy seguro de por qué, pero mi GamePad no se conecta a mi Wii.", "Super Mario World 2 - El tema principal de Yoshi's Island es absolutamente genial y no hay forma de que me convenzas de lo contrario.", "Mis lanzamientos favoritos de Nintendo Switch han sido Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pack y Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Pack \"Te gustó mucho el título de la consola virtual de Nintendo Wii U, así que lo traeremos de vuelta\". Realmente puedes decir que a Nintendo le importa.", "Decir “Conoces a Ash, bendice su corazón, hace UwU todo el día “ es la manera del sur de decir “Ash hace uwu todo el tiempo y es bastante raro y idiota y desearía que no lo hiciera”", - "Mi primer video en mi canal!! Llevaba mucho tiempo queriendo hacer videos, pero mi computadora portátil funcionaba bastante mal y no podía ejecutar Fraps, Skype y Minecraft al mismo tiempo. ¡pero ahora eso se acabó! ¡con la ayuda de mi profesor de TI, mi computadora portátil funciona mucho mejor y puedo grabar ahora! Espero que les guste y si es así dale me gusta y suscríbete!!!" + "Mi primer video en mi canal!! Llevaba mucho tiempo queriendo hacer videos, pero mi computadora portátil funcionaba bastante mal y no podía ejecutar Fraps, Skype y Minecraft al mismo tiempo. ¡pero ahora eso se acabó! ¡con la ayuda de mi profesor de TI, mi computadora portátil funciona mucho mejor y puedo grabar ahora! Espero que les guste y si es así dale me gusta y suscríbete!!!", + "Me parece bien" ] }, "progressPage": { - "title": "Progreso", + "title": "Nuestro Progreso", "description": "¡Comprueba el progreso y las metas pendientes! (Se actualiza cada hora aproximadamente, así que no refleja TODAS nuestras metas o el progreso total)" }, "blogPage": { @@ -146,7 +318,7 @@ "publishedOn": "en" }, "localizationPage": { - "title": "Vamos a localizar", + "title": "Vamos a traducir", "description": "Pega un enlace a una localización JSON accesible pulicamente para probarla en el sitio", "instructions": "Ver instrucciones de localización", "fileInput": "Archivo a probar", @@ -171,11 +343,11 @@ "search": { "title": "¿Tienes un código de error?", "caption": "¡Escribe el código de error del cuadro para obtener información de tu problema!", - "label": "Codigo de error", + "label": "Código de error", "no_match": "No se encontraron coincidencias" }, "sidebar": { - "getting_started": "Empezando", + "getting_started": "Para empezar", "install_extended": "Instalar Pretendo", "search": "Buscar", "juxt_err": "Codigos de error - Juxt", @@ -207,7 +379,7 @@ "timezone": "Zona horaria", "serverEnv": "Entorno del servidor", "beta": "Beta", - "hasAccessPrompt": "Tu rango actual tiene acceso a los servidores beta. Cool!", + "hasAccessPrompt": "Tu rango actual tiene acceso a los servidores beta. ¡Genial!", "signInSecurity": "Inicio de sesión y seguridad", "email": "Correo electrónico", "password": "Contraseña", @@ -226,12 +398,10 @@ "nickname": "Apodo", "upgradePrompt": "Los servidores beta son exclusivos para los beta testers.
Para convertirte en un beta tester, actualiza a un nivel de cuenta superior.", "userSettings": "Ajustes de usuario", - "no_signins_notice": "El historial de inicios de sesión no es vigilado. Vuelve más tarde!", - "no_newsletter_notice": "Boletín no disponible actualmente. Vuelva a consultar más tarde", + "no_signins_notice": "El historial de inicios de sesión no es vigilado. ¡Vuelve más tarde!", + "no_newsletter_notice": "Boletín no disponible actualmente. Vuelve a intentarlo más tarde", "no_edit_from_dashboard": "La edición de la configuración de PNID desde el panel del usuario no está disponible actualmente. Actualice la configuración de usuario desde su consola de juegos vinculada" }, - "downloadFiles": "Descargar datos de cuenta", - "downloadFilesDescription": "(no funcionara en Nintendo Network)", "upgrade": "Subir de rango", "unavailable": "No disponible" }, @@ -262,7 +432,7 @@ "month": "mes", "tierSelectPrompt": "Selecciona un rango", "unsub": "Cancelar suscripción", - "unsubPrompt": "¿Está seguro de que desea darse de baja de tiername? Perderá el acceso a las ventajas asociadas con ese nivel.", + "unsubPrompt": "¿Está seguro de que desea darse de baja de tiername? Perderá inmediatamente el acceso a las ventajas asociadas con ese nivel.", "unsubConfirm": "Cancelar suscripción", "changeTier": "Cambiar rango", "changeTierPrompt": "¿Está seguro de que desea darse de baja de oldtiername y suscribirse a newtiername?", @@ -278,5 +448,8 @@ "cancel": "Cancelar", "confirm": "Confirmar", "close": "Cerrar" + }, + "notfound": { + "description": "¡Oops! No hemos podido encontrar esta página." } } diff --git a/locales/eu_ES.json b/locales/eu_ES.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/eu_ES.json @@ -0,0 +1 @@ +{} diff --git a/locales/fi_FI.json b/locales/fi_FI.json index 40073bb..806e24f 100644 --- a/locales/fi_FI.json +++ b/locales/fi_FI.json @@ -7,7 +7,7 @@ }, { "question": "Toimiiko olemassaoleva NNID:ni Pretendossa?", - "answer": "Ei, valitettavasti. Olemassa olevat NNID:t eivät tule toimimaan Pretendossa, sillä vain Nintendolla on tiedossaan käyttäjätietosi. Vaikka NNID-PNID tietojensiirto on teoriassa mahdollista, se on riskialtista ja vaatii arkaluonteisia käyttäjätietoja, joita emme halua haltuumme." + "answer": "Valitettavasti ei. Olemassa olevat NNID:t eivät tule toimimaan Pretendossa, sillä vain Nintendolla on tiedossaan käyttäjätietosi. Vaikka NNID-PNID tietojensiirto on teoriassa mahdollista, se on riskialtista ja vaatii arkaluonteisia käyttäjätietoja, joita emme halua haltuumme." }, { "question": "Kuinka käytän Pretendoa?", @@ -58,7 +58,7 @@ }, "donate": "Lahjoita", "blog": "Blogi", - "credits": "Krediitit" + "credits": "Tekijät" }, "hero": { "subtitle": "Pelipalvelimet", @@ -90,16 +90,21 @@ "caption": "Miiversen uudelleenluonti, kuten se olisi syntynyt tähän päivään." }, { - "title": "Cemu -tuki", + "title": "Cemu-tuki", "caption": "Pelaa Wii U suosikkipelejäsi jopa ilman konsolia!" } ], - "title": "Mitä kehitämme", + "title": "Mitä teemme", "text": "Projektissamme on useita komponentteja. Tässä on osa niistä." }, "credits": { "title": "Tiimi", - "text": "Tutustu tiimiin projektin takana" + "text": "Tutustu tiimiin projektin takana", + "people": [ + { + "caption": "Projektin omistaja ja johtava kehittäjä" + } + ] }, "specialThanks": { "title": "Erityiskiitokset", @@ -115,7 +120,7 @@ }, "footer": { "socials": "Sosiaaliset", - "usefulLinks": "Tärkeitä linkkejä", + "usefulLinks": "Hyödyllisiä linkkejä", "widget": { "captions": [ "Haluatko pysyä ajan tasalla?", @@ -160,14 +165,12 @@ "registerPrompt": "Ei vielä tiliä?" }, "settings": { - "downloadFiles": "Lataa tilin tiedostot", - "downloadFilesDescription": "(ei toimi Nintendo Network:issa)", "upgrade": "Nosta tililuokkaa", - "unavailable": "Ei saatavissa", + "unavailable": "Ei saatavilla", "settingCards": { "userSettings": "Käyttäjän asetukset", "profile": "Profiili", - "nickname": "Lempinimi", + "nickname": "Nimimerkki", "birthDate": "Syntymäpäivä", "gender": "Sukupuoli", "timezone": "Aikavyöhyke", @@ -177,20 +180,20 @@ "signInHistory": "Kirjautumishistoria", "fullSignInHistory": "Näytä koko kirjautumishistoria", "connectedToDiscord": "Littetty Discord -tiliin", - "removeDiscord": "Poista Discord -tili", - "noDiscordLinked": "Ei liitettyä Discord -tiliä.", + "removeDiscord": "Poista Discord-tili", + "noDiscordLinked": "Ei liitettyä Discord-tiliä.", "newsletter": "Uutiskirje", "passwordPrompt": "Anna PNID salasanasi ladataksesi Cemu -tiedostot", "password": "Salasana", "country": "Maa/alue", "upgradePrompt": "Betapalvelimet ovat van betatestaajille.
Jos haluat mukaan betatestiin, nosta tililuokkaa.", "hasAccessPrompt": "Nykyinen tililuokituksesi antaa sinulle oikeudet betapalvelimille. Mahtavaa!", - "signInSecurity": "Kirjautuminen ja tietoturva", + "signInSecurity": "Kirjautuminen ja turvallisuus", "discord": "Discord", "otherSettings": "Muut asetukset", "email": "Sähköposti", - "passwordResetNotice": "Vaihdettuasi salasanan, sinut kirjataan ulos kaikilta laitteilta.", - "linkDiscord": "Liitä Discord -tili", + "passwordResetNotice": "Salasanan vaihtamisen jälkeen sinut kirjataan ulos kaikilta laitteilta.", + "linkDiscord": "Liitä Discord-tili", "newsletterPrompt": "Saa tietoja projektin etenemisestä sähköpostiisi (voit perua kirjeen milloin vain)", "no_newsletter_notice": "Uutiskirje ei ole tällä hetkellä saatavilla. Palaa asiaan myöhemmin", "no_signins_notice": "Kirjautumishistoriaa ei toistaiseksi seurata. Palaa asiaan myöhemmin!", diff --git a/locales/fr_CA.json b/locales/fr_CA.json new file mode 100644 index 0000000..e73c950 --- /dev/null +++ b/locales/fr_CA.json @@ -0,0 +1,90 @@ +{ + "nav": { + "faq": "FAQ", + "about": "À Propos", + "account": "Compte", + "blog": "Blogue", + "accountWidget": { + "settings": "Paramètres", + "logout": "Déconnexion" + }, + "docs": "Documentation", + "donate": "Faire un don", + "progress": "Progression", + "credits": "L'équipe", + "dropdown": { + "captions": { + "about": "À propos du projet", + "credits": "Rencontrez l'équipe", + "blog": "Un résumé de nos mises à jour récentes", + "progress": "Vérifiez la progression et les objectifs du projet" + } + } + }, + "hero": { + "subtitle": "Serveurs de Jeux", + "title": "Recréé", + "buttons": { + "readMore": "En savoir plus" + } + }, + "aboutUs": { + "title": "À propos de nous", + "paragraphs": [ + "Pretendo est un projet à code source ouvert qui vise à recréer le Nintendo Network pour la 3DS et la Wii U en utilisant la rétro-ingénierie.", + "Puisque nos services sont gratuits et à code source libre, ils vont exister longtemps." + ] + }, + "blogPage": { + "publishedOn": "le" + }, + "faq": { + "QAs": [ + { + "question": "C'est quoi, Pretendo?", + "answer": "Pretendo est une alternative au Nintendo Network à code source libre qui vise à créer des serveurs personnalisés pour la famille de consoles Wii U et 3DS. Notre but est de préserver les fonctionnalités internet de ces consoles, afin de permettre aux joueurs de continuer de jouer à leurs jeux Wii U et 3DS préférés à leur plein potentiel." + }, + { + "question": "Est-ce que mon identifiant Nintendo Network fonctionnera avec Pretendo?", + "answer": "Malheureusement, non. Les identifiants du Nintendo Network ne fonctionneront pas avec Pretendo, puisque seul Nintendo détient vos données d'utilisateur. Bien qu'une extraction des données soit techniquement possible, ça serait risqué et nécessiterait des données personelles d'utilisateurs que nous ne voulons pas détenir." + }, + { + "answer": "Afin de commencer l'installation de Pretendo sur 3DS, Wii U ou un émulateur, veuillez consulter notre guide d'installation!" + }, + { + "question": "Savez-vous quand tel service ou telle fonctionnalité sera prêt(e)?", + "answer": "Non. La majorité des fonctionnalités et des services de Pretendo sont développés indépendament (par example, un développeur pourrait être en charge de Miiverse pendant qu'un autre est en charge des Comptes et Amis). Ainsi, nous ne pouvons pas donner une estimation du temps requis pour cela." + }, + { + "question": "Quand allez-vous ajouter d'autres jeux?" + }, + { + "question": "Si j'utilise un émulateur, sera-t-il suffisant pour utiliser Pretendo?" + }, + { + "question": "Est-ce que Pretendo fonctionne sur Cemu ou d'autres émulateurs?", + "answer": "La version 2.1 de Cemu supporte Pretendo sous les paramètres de connexion internet de l'émulateur. Afin d'avoir plus d'information sur l'utilisation de Pretendo avec Cemu, allez-voir la documentation.
Certains émulateurs 3DS pourraient prendre en charge Pretendo, mais nous n'avons présentement pas de recommendation officielle ou de guides d'installation. La version la plus récente de Citra ne prend pas en charge Pretendo." + }, + { + "answer": "La Wii possède déja des serveurs personnalisés fournis par Wiimmfi. Nous ne voulons présentement pas cibler la Switch, car ses services sont payants et complètements différents du Nintendo Network." + }, + { + "answer": "Pour la meilleure expérience possible sur console, vous aurez besoin de pirater votre système - par exemple, avec Aroma pour la Wii U et Luma3DS pour la 3DS. Cependant, sur Wii U, la méthode sans piratage SSSL est également disponible, mais avec des fonctionnalités limitées. Regardez le guide d'installation pour plus de détails.", + "question": "Devrais-je pirater ma console pour me connecter?" + }, + { + "question": "Si je suis banni du Nintendo Network, vais-je également être banni sur Pretendo?", + "answer": "Nous n'avons pas accès aux bannissements du Nintendo Network, donc aucun utilisateur Nintendo Network sera banni dans Pretendo. Cependant, nous avons des règles à respecter lors de l'utilisation du service. L'infraction d'une règle pourrait mener à un bannissement sur Pretendo." + }, + { + "question": "Puis-je tricher ou utiliser des mods (modifications de jeu) en ligne sur Pretendo?" + } + ], + "title": "Foire Aux Questions", + "text": "Voici quelques questions fréquemment posées." + }, + "progress": { + "githubRepo": "Répertoire Github", + "title": "Progression" + } +} diff --git a/locales/fr_FR.json b/locales/fr_FR.json index bfe5142..2a90971 100644 --- a/locales/fr_FR.json +++ b/locales/fr_FR.json @@ -1,6 +1,6 @@ { "nav": { - "about": "À Propos", + "about": "À propos", "faq": "FAQ", "docs": "Documentation", "credits": "Crédits", @@ -9,14 +9,14 @@ "account": "Compte", "accountWidget": { "logout": "Déconnexion", - "settings": "Réglages" + "settings": "Paramètres" }, "donate": "Faire un don", "dropdown": { "captions": { "about": "À propos du projet", "blog": "Nos dernières mises à jour, en condensé", - "progress": "Vérifier l'avancement et les objectifs du projet", + "progress": "Vérifiez l'avancement et les objectifs du projet", "credits": "Rencontrez l'équipe", "faq": "Questions fréquemment posées" } @@ -25,7 +25,7 @@ "hero": { "subtitle": "Serveurs de jeux", "title": "Recréés", - "text": "Pretendo est une alternative gratuite et open source des serveurs Nintendo pour la 3DS et la Wii U permettant la connectivité en ligne pour tous, y compris après l'arrêt des serveurs officiels", + "text": "Pretendo est une alternative gratuite et open source aux serveurs Nintendo pour la 3DS et la Wii U qui permet à tout utilisateur d'accéder aux services en ligne, y compris après l'arrêt des serveurs officiels", "buttons": { "readMore": "En savoir plus" } @@ -33,8 +33,8 @@ "aboutUs": { "title": "À propos de nous", "paragraphs": [ - "Pretendo est un projet open source qui vise à recréer le Nintendo Network pour la 3DS et la Wii U en utilisant la rétro-ingénierie.", - "Puisque nos services seront à la fois gratuits et open source, ils pourront exister pendant longtemps après l'inévitable fermeture du Nintendo Network." + "Pretendo est un projet open source qui vise à recréer le Nintendo Network pour la 3DS et la Wii U par le biais d'une rétro-ingénierie dite « propre ».", + "Puisque nos services sont à la fois gratuits et open source, ils existeront longtemps." ] }, "progress": { @@ -50,42 +50,54 @@ "answer": "Pretendo est une alternative open source du service Nintendo Network qui vise à créer des serveurs personnalisés pour la famille des consoles Wii U et 3DS. Notre objectif est de préserver les fonctionnalités en ligne de ces consoles, afin de permettre aux joueurs de continuer à jouer à leurs jeux Wii U et 3DS favoris à leur plein potentiel." }, { - "question": "Mes Identifiants Réseau de Nintendo existants fonctionneront-ils sur Pretendo ?", - "answer": "Malheureusement, non. Les NNIDs existants ne fonctionneront pas sur Pretendo car seul Nintendo détient vos données utilisateur. Bien qu'une migration des NNID aux PNID soit théoriquement possible, elle serait risquée et nécessiterait des données personnelles sensibles que nous préférons ne pas stocker." + "question": "Puis-je me connecter à Pretendo avec un identifiant Nintendo Network existant ?", + "answer": "Malheureusement, non. Les identifiants existants ne seront pas conservés, et Nintendo restera le seul détenteur de vos données personnelles. Bien qu'une extraction des informations soit théoriquement possible, cela reviendrait à récupérer des milliers de données sensibles : chose que nous désapprouvons." }, { - "question": "Comment puis-je utiliser Pretendo ?", - "answer": "Pretendo n'est actuellement pas dans un état prêt à être utilisé par le public. Cependant, dès qu'il le sera, vous pourrez utiliser Pretendo en exécutant simplement notre logiciel Homebrew sur votre console." + "question": "Comment utiliser Pretendo ?", + "answer": "Pour commencer à utiliser Pretendo avec une 3DS, une Wii U ou un émulateur, veuillez consulter notre guide d'installation !" }, { - "question": "Savez-vous quand fonctionnalité/service sera prêt ?", - "answer": "Non. De nombreuses fonctionnalités/services de Pretendo sont développés indépendamment (par exemple, un développeur peut travailler sur Miiverse tandis qu'un autre travaille sur Comptes et Amis) et nous ne pouvons donc pas donner d'estimation exacte du temps qu'il faudra pour que tout soit prêt." + "question": "Savez-vous quand de nouvelles fonctionnalités ou services seront prêt(e)s ?", + "answer": "Pas du tout ! Si les grands axes du projet ont été fixés en début de développement, beaucoup de sous-objectifs restent indéfinis temporellement et chronologiquement. Le développement des fonctionnalités étant assez libre, nous ne sommes pas en mesure d'estimer l'heure à laquelle le projet intégral aboutira." }, { - "question": "Est-ce que Pretendo fonctionne sur Cemu/émulateurs ?", - "answer": "Pretendo supporte n'importe quel client qui peut interagir avec le Nintendo Network. Actuellement, le seul émulateur avec cette fonctionnalité est Cemu. Cemu 2.0 supporte officiellement Pretendo dans les paramètres de votre compte dans l'émulateur. Pour plus d'informations sur l'utilisation de Cemu, visitez la documentation.
Citra ne supporte pas véritablement le jeu en ligne et ne fonctionne donc pas Pretendo, et l'émulateur ne semble pas présenter de signes d'un support prochain. Mikage, un émulateur 3DS pour appareils mobiles, sera peut-être compatible dans le futur, néanmoins cela reste incertain." + "question": "Quand d'autres jeux seront-ils ajoutés ?", + "answer": "Nous travaillons sur de nouveaux jeux une fois que nous estimons que nos bibliothèques internes sont prêtes à les prendre en charge et que du temps de développement est disponible pour les maintenir. Une grande partie de notre travail consiste à stabiliser et finaliser nos jeux existants – nous voulons offrir la meilleure expérience possible avant de passer à de nouveaux titres. Comme de nouvelles tâches surgissent constamment, nous ne pouvons pas estimer quand cela se produira." }, { - "question": "Si je suis banni du Nintendo Network, resterai-je banni lorsque j'utiliserai Pretendo ?", - "answer": "Nous n'aurons pas accès aux bannissements du Nintendo Network, donc personne ne sera banni de nos serveurs dans un premier temps. En revanche, il y aura des règles à suivre lors de l'utilisation de nos services et le non-respect de ces règles pourrait entraîner des bannissements." + "question": "Si j'utilise un émulateur, sera-t-il suffisant pour utiliser Pretendo ?", + "answer": "Non. Pour des raisons de sécurité et de modération, si vous utilisez un émulateur, vous aurez toujours besoin d'une vraie console. Cela permet une meilleure sécurité et une modération plus efficace pour permettre de créer une expérience sûre et satisfaisante de notre service." }, { - "question": "Est-ce que Pretendo sera compatible avec la Wii/Switch ?", - "answer": "La Wii dispose déjà de serveurs personnalisés fournis par Wiimmfi. Concernant la Switch, nous ne souhaitons actuellement pas la cibler car ses services sont payants et complètement différents du Nintendo Network." + "question": "Pretendo fonctionne-t-il sur Cemu ou un autre émulateur ?", + "answer": "La version 2.1 de Cemu prend Pretendo en charge, via les paramètres de connexion de l'émulateur. Pour plus d'informations sur comment s'y prendre, référez-vous à la documentation.
Certains émulateurs 3DS prennent charge Pretendo, nous n'avons pas de recommandations officielles ou de procédures d'installation pour l'instant. La version la plus récente de Citra ne prend pas en charge Pretendo." }, { - "question": "Aurais-je besoin de modifier ma console pour me connecter ?", - "answer": "Oui, vous devrez hack votre appareil afin de vous connecter ; cependant sur Wii U, un accès au Homebrew Launcher est suffisant (avec Haxchi, Coldboot Haxchi, ou même la faille du Navigateur Web). La démarche à suivre pour la 3DS sera fournie ultérieurement." + "question": "Est-ce que Pretendo sera compatible avec la Wii/Switch ?", + "answer": "La Wii dispose déjà de serveurs personnalisés fournis par Wiimmfi. Concernant la Switch, nous ne souhaitons actuellement pas la cibler, car ses services sont payants et complètement différents du Nintendo Network." + }, + { + "answer": "Pour la meilleure expérience possible sur console, vous aurez besoin de modifier le système de celle-ci — par exemple, grâce à Aroma pour la Wii U ou Luma3DS pour la 3DS. Cependant, avec la Wii U, il est possible d'accéder à Pretendo sans modification, mais avec des fonctionnalités limitées. Voir la documentation pour plus de détails.", + "question": "Dois-je modifier ma console pour me connecter ?" + }, + { + "question": "Si je suis banni du Nintendo Network, est-ce que ce sera le cas avec Pretendo ?", + "answer": "Nous n'avons pas accès à la liste des bannissements du Nintendo Network, ce ne sera donc pas le cas. Il est cependant obligatoire de suivre les règles en vigueur sur notre réseau, sous peine de ban." + }, + { + "answer": "Uniquement lors de parties privées. L'utilisation de triches en public afin d'obtenir (ou de conférer) un avantage déloyal ou de nuire à l'expérience de jeu d'autres joueurs, sans leur consentement, est interdite sous peine de bannissement. Nous bannissons régulièrement certains comptes et consoles parmi les utilisateurs Wii U et 3DS. Pretendo emploie de nouvelles mesures de sécurité, de sorte à rendre inefficaces les tentatives d'évasion de ban par changement de numéro de série (ou par d'autres méthodes traditionnelles).", + "question": "Autorisez-vous la triche ou l'utilisation de mods en ligne sur Pretendo ?" } ] }, "showcase": { "title": "Ce qu'on fait", - "text": "Notre projet comporte de nombreuses composantes. En voici quelques uns.", + "text": "Notre projet comporte de nombreuses composantes. En voici quelques-unes.", "cards": [ { "title": "Serveurs de jeu", - "caption": "Ramener vos jeux et contenus préférés à l'aide de serveurs personnalisés." + "caption": "Ramenez à la vie vos jeux et contenus favoris grâce à nos serveurs personnalisés." }, { "title": "Juxtaposition", @@ -99,14 +111,175 @@ }, "credits": { "title": "L'équipe", - "text": "Rencontrez l'équipe derrière le projet" + "text": "Rencontrez l'équipe derrière le projet", + "people": [ + { + "caption": "Maître du projet, développeur en chef", + "name": "Jonathan Barrow (jonbarrow)", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow" + }, + { + "caption": "Recherche et développement (Miiverse)", + "github": "https://github.com/CaramelKat", + "name": "Jemma (CaramelKat)", + "picture": "https://github.com/caramelkat.png" + }, + { + "caption": "Recherche et développement de patchs Wii U", + "github": "https://github.com/ashquarky", + "name": "quarky", + "picture": "https://github.com/ashquarky.png" + }, + { + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom", + "caption": "Recherche sur les systèmes, architecture serveur", + "name": "SuperMarioDaBom" + }, + { + "name": "pinklimes", + "caption": "Développement web", + "picture": "https://github.com/gitlimes.png", + "github": "https://github.com/gitlimes.png" + }, + { + "caption": "Recherche sur les systèmes, développement serveur", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "name": "Shutterbug2000", + "github": "https://github.com/shutterbug2000" + }, + { + "caption": "Conservation, architecture serveur", + "name": "Billy", + "github": "https://github.com/InternalLoss", + "picture": "https://github.com/InternalLoss.png" + }, + { + "caption": "Recherche sur les systèmes, développement serveur", + "name": "DaniElectra", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra" + }, + { + "caption": "Développement serveur et web", + "name": "niko", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "caption": "DevOps et travail de la communauté", + "name": "MatthewL246", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "caption": "Développement serveur et optimisations", + "picture": "https://github.com/wolfendale.png", + "name": "wolfendale", + "github": "https://github.com/wolfendale" + }, + { + "caption": "Recherche et développement de patchs (3DS)", + "picture": "https://github.com/TraceEntertains.png", + "name": "TraceEntertains", + "github": "https://github.com/TraceEntertains" + } + ] }, "specialThanks": { - "title": "Remerciements spéciaux", - "text": "Sans eux, Pretendo ne serait pas ce qu'il est aujourd'hui." + "title": "Sincères remerciements", + "text": "Sans eux, Pretendo ne serait pas ce qu'il est aujourd'hui.", + "people": [ + { + "name": "Contributeurs GitHub", + "caption": "Localisations et autres contributions", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "caption": "Développement de la bibliothèque crunch", + "name": "superwhiskers", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers" + }, + { + "caption": "Développement 3DS et du dissecteur NEX (nex-dissector)", + "github": "https://github.com/Stary2001", + "picture": "https://github.com/Stary2001.png", + "name": "Stary" + }, + { + "name": "rverse", + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub", + "caption": "Partage d'informations concernant Miiverse" + }, + { + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay", + "name": "Kinnay", + "caption": "Recherche sur les structures de données Nintendo", + "special": "Sincères remerciements" + }, + { + "caption": "Icônes pour l'éditeur Mii et les réactions Juxt", + "name": "NinStar", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "name": "Rambo6Glaz", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12", + "caption": "Recherches consoles et serveurs de jeu" + }, + { + "caption": "Développement de patch pour la Wii U", + "picture": "https://github.com/GaryOderNichts.png", + "github": "https://github.com/GaryOderNichts", + "name": "GaryOderNichts" + }, + { + "caption": "Créateur de patch 3DS", + "name": "zaksabeast", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast" + }, + { + "caption": "Architecture serveur", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs", + "name": "mrjvs" + }, + { + "caption": "Architecture serveur", + "name": "binaryoverload", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload" + }, + { + "caption": "Recherches sur Splatoon et rotations de stages", + "name": "Simonx22", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "caption": "Rotations Splatoon et recherches", + "name": "OatmealDome", + "github": "https://github.com/OatmealDome", + "picture": "https://github.com/OatmealDome.png" + }, + { + "name": "Contributeurs GitHub", + "caption": "Localisations et autres contributions", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + } + ] }, "discordJoin": { - "title": "Tiens-toi à jour", + "title": "Rejoignez-nous", "text": "Rejoignez notre serveur Discord pour obtenir les dernières mises à jour sur le projet.", "widget": { "text": "Recevez des mises à jour en temps réel", @@ -114,30 +287,31 @@ } }, "footer": { - "socials": "Liens Sociaux", + "socials": "Réseaux sociaux", "usefulLinks": "Liens utiles", "widget": { "captions": [ "Vous voulez rester à jour ?", "Rejoignez notre serveur Discord !" ], - "button": "Rejoignez maintenant !" + "button": "Rejoignez-nous maintenant !" }, "bandwidthRaccoonQuotes": [ - "Je suis Bandwidth le Raton Laveur, j'adore mordiller les cables de Pretendo Network ! Miam !", - "Beaucoup de gens nous demandent si on aura de problèmes avec Nintendo ; Moi je leur réponds que ma tante qui travaille chez Nintendo a dit qu'elle était d'accord.", + "Je suis Bandwidth le Raton Laveur, un vrai glouton. Mon péché mignon ? Les câbles des serveurs Pretendo, pardi !... Miam !", + "Beaucoup de gens nous demandent si on aura des problèmes juridiques avec Nintendo... J'aime leur répondre que ma tante travaille chez Nintendo et qu'elle m'a dit que c'était OK.", "Webkit v537 est la meilleure version de Webkit pour la Wii U. Non, on ne portera pas Chrome sur la Wii U.", "J'ai hâte qu'on soit le 19 Janvier 2038 à 3h14 !", - "La Wii U n'était pas si nulle que ça, mais les pubs étaient vraiment mauvaises par contre. Ah, attends mon Gamepad n'arrive pas à se connecter à ma Wii.", + "La Wii U n'était pas si nulle que ça, en vrai, c'est juste que les pubs étaient vraiment désastreuses... Hum, c'est étrange, j'ai l'impression que mon Gamepad n'arrive pas à se connecter à ma Wii.", "La musique principale de Super Mario World 2 - Yoshi's Island est la meilleure musique du monde et tu ne peux pas changer mon avis.", "Mes dernières sorties préférée sont le Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Un Port Sans Importance et Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Vous l'aimiez vraiment beaucoup sur la Console Virtuelle de la Wii U\" Pack. On voit que Nintendo a de la passion.", - "\"Tu vois Ash ? Ouais, bah elle fait UwU tout le temps\" est vraiment la façon la plus gentille possible de dire \"Ash fait UwU tout le temps et j'en ai marre\"", - "Ma premièr video ! ! ! !1 ! G toujour voulu en fair mais mon PC étè tou pouri alor ma maman ma aidé a améliorer ses performans et mintenan je peu fair dé vidéos ! alor aboné vou é liké SVP !11 ! !" + "\"Tu vois qui c'est Sasha ? C'est fou elle dit souvent UwU, tu trouves pas ?\" : c'est vraiment la plus douce des façons de dire \"Sasha dit H24 UwU, c'est trop chiant et chelou : à l'aide\". À tous ceux qui connaissent une Sasha... explicitez vos appels au secours, nan ?", + "Ma premièr video ! ! ! !1 ! G toujour voulu en fair mais mon PC étè tou pouri alor ma maman ma aidé a améliorer ses performans et mintenan je peu fair dé vidéos ! alor aboné vou é liké SVP !11 ! !", + "Cela me semble bon" ] }, "progressPage": { "title": "Notre progression", - "description": "Vérifiez l'avancement et les objectifs du projet ! (Mis à jour environ toute les heures, ne reflète pas TOUS nos objectifs et notre progression)" + "description": "Vérifiez l'avancement et les objectifs du projet ! (Fil mis à jour toutes les heures environ. Attention, cela ne reflète qu'un échantillon de notre travail : ce n'est que la partie émergée de l'iceberg dit-on !)" }, "blogPage": { "title": "Blog", @@ -154,25 +328,25 @@ "button": "Tester un fichier" }, "docs": { - "missingInLocale": "Cette page n'est pas disponible dans votre région. Veuillez essayer avec la version anglaise ci-dessous.", + "missingInLocale": "La page que vous consultez n'est pas encore traduite dans votre langue. Nous vous invitons à lire la version anglaise originale ci-dessous.", "quickLinks": { "header": "Liens rapides", "links": [ { "header": "Installer Pretendo", - "caption": "Afficher les instructions de configuration" + "caption": "Afficher les instructions d'installation" }, { "header": "Vous avez une erreur ?", - "caption": "Cherchez-la ici" + "caption": "Recherchez-la ici !" } ] }, "search": { "title": "Avez-vous un code d'erreur ?", "label": "Code d'erreur", - "caption": "Écrivez dans la case ci-dessous pour obtenir des informations sur votre problème !", - "no_match": "Aucun Résultat" + "caption": "Inscrivez-le ci-dessous pour de plus amples informations !", + "no_match": "Aucun résultat" }, "sidebar": { "search": "Recherche", @@ -185,55 +359,53 @@ }, "account": { "loginForm": { - "login": "Connexion", - "detailsPrompt": "Entrez les informations du compte ci-dessous", + "login": "Se connecter", + "detailsPrompt": "Saisissez vos informations de connexion", "password": "Mot de Passe", - "loginPrompt": "Déjà un Compte ?", - "username": "Pseudo", + "loginPrompt": "Compte déjà existant ?", + "username": "Nom d'utilisateur", "register": "S'inscrire", "confirmPassword": "Confirmez le Mot de Passe", "email": "Email", - "miiName": "Nom du Mii", + "miiName": "Surnom du Mii", "forgotPassword": "Mot de Passe oublié ?", - "registerPrompt": "Pas de Compte ?" + "registerPrompt": "Pas encore inscrit ?" }, "settings": { - "downloadFiles": "Télécharger fichiers du compte", "settingCards": { - "gender": "Genre", + "gender": "Sexe", "profile": "Profil", "nickname": "Surnom", "birthDate": "Date de Naissance", "country": "Pays/Région", - "timezone": "Décalage Horaire", + "timezone": "Fuseau horaire", "serverEnv": "Environment du Serveur", "production": "Production", "beta": "Beta", - "upgradePrompt": "Les Serveurs Beta sont exclusifs au Beta Testeurs.
Pour devenir un Beta Testeur, mettez à niveau votre compte à un niveau plus élevé.", + "upgradePrompt": "Les serveurs Beta sont exclusifs aux Beta Testeurs.
Pour devenir un Beta Testeur, mettez à niveau votre compte à un niveau plus élevé.", "hasAccessPrompt": "Votre niveau actuel vous donne accès au serveurs beta. Super !", - "newsletterPrompt": "Recevoir les mises à jour via email (vous pourrez toujours changer ça plus tard)", + "newsletterPrompt": "Recevoir les mises à jour par mail (vous pouvez vous désinscrire à tout moment)", "signInSecurity": "Inscription et sécurité", "email": "Email", "password": "Mot de Passe", "passwordResetNotice": "Une fois votre mot de passe changé, vous serez déconnecté de tous les appareils.", - "signInHistory": "Historique de Connexion", - "fullSignInHistory": "Voir l'historique de connexion complète", - "otherSettings": "Autres Paramètres", + "signInHistory": "Historique de connexion", + "fullSignInHistory": "Voir l'historique de connexion intégral", + "otherSettings": "Autres paramètres", "discord": "Discord", "connectedToDiscord": "Connecté à Discord en tant que", "removeDiscord": "Délier le compte Discord", "noDiscordLinked": "Pas de compte Discord associé.", "linkDiscord": "Associer un compte Discord", - "newsletter": "Nouveautés", + "newsletter": "Newsletter", "passwordPrompt": "Entrez votre mot de passe d'Identifiant Pretendo Network (PNID) pour télécharger les fichiers Cemu", - "no_edit_from_dashboard": "Le changement des préférences du IDNP dans le menu d'utilisateur n'est pas disponsible. Veuillez changer les préférences de profil sur votre console de jeu", + "no_edit_from_dashboard": "La configuration des paramètres PNID depuis le menu utilisateur est actuellement indisponible. Veuillez procéder aux changements depuis votre console.", "userSettings": "Paramètres du Compte", - "no_signins_notice": "L'historique de connexion n'est actuellement pas sauvegardé. Revenez plus tard !", + "no_signins_notice": "L'historique de connexion n'est pas encore établi. Réessayez ultérieurement.", "no_newsletter_notice": "Newsletter non disponible actuellement. Revenez plus tard" }, - "downloadFilesDescription": "(Ne fonctionnera pas avec le Nintendo Network)", "upgrade": "Mettre à Niveau le compte", - "unavailable": "Non disponible" + "unavailable": "Indisponible" }, "banned": "Banni", "accountLevel": [ @@ -264,7 +436,7 @@ "month": "mois", "tierSelectPrompt": "Sélectionnez un niveau", "unsub": "Se désabonner", - "unsubPrompt": "Êtes-vous sûr de vouloir vous désabonner du tiername ? Vous perdrez toutes les récompenses associées à ce niveau.", + "unsubPrompt": "Êtes-vous sûr de vouloir vous désabonner du tiername ? Vous perdrez toutes les récompenses associées à ce niveau immédiatement.", "unsubConfirm": "Se désabonner", "changeTier": "Changer de niveau", "changeTierConfirm": "Changer de niveau", @@ -278,5 +450,8 @@ "cancel": "Annuler", "confirm": "Confirmer", "close": "Fermer" + }, + "notfound": { + "description": "Oups ! Nous n'arrivons pas à trouver cette page." } } diff --git a/locales/ga_IE.json b/locales/ga_IE.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/ga_IE.json @@ -0,0 +1 @@ +{} diff --git a/locales/gl_ES.json b/locales/gl_ES.json new file mode 100644 index 0000000..ddfe060 --- /dev/null +++ b/locales/gl_ES.json @@ -0,0 +1,280 @@ +{ + "nav": { + "credits": "Créditos", + "donate": "Doa", + "accountWidget": { + "settings": "Configuración", + "logout": "Acceder" + }, + "dropdown": { + "captions": { + "credits": "coñecer o equipo", + "blog": "As nosas últimas actualizacións, resumidas", + "progress": "Comproba o progreso e os obxectivos do proxecto", + "about": "Sobre o proxecto", + "faq": "Preguntas Frecuentes" + } + }, + "docs": "Documentos", + "faq": "Preguntas e respostas", + "about": "Sobre", + "progress": "Progreso", + "blog": "Blog", + "account": "Conta" + }, + "hero": { + "subtitle": "Servidores de xogos", + "title": "Recreado", + "text": "Pretendo é un substituto gratuíto e de código aberto para os servidores de Nintendo tanto para 3DS como para Wii U, que permite a conectividade en liña para todos incluso despois de que os servidores orixinais estean descontinuados", + "buttons": { + "readMore": "Le máis" + } + }, + "faq": { + "text": "Abaixo amósanse algunhas preguntas comúns que nos fan.", + "QAs": [ + { + "question": "Que é Pretendo?", + "answer": "Pretendo é un substituto de Nintendo Network de código aberto que ten como obxectivo crear servidores personalizados para a familia de consolas Wii U e 3DS. O noso obxectivo é preservar a funcionalidade en liña destas consolas, para permitir aos xogadores seguir xogando aos seus xogos favoritos de Wii U e 3DS ao máximo." + }, + { + "question": "O meu Nintendo Network ID existente funcionará é pretendo?", + "answer": "Por desgraza non. Os ID de Nintendo Network existentes non funcionarán é Pretendo, xa que só Nintendo conserva os datos dos usuarios. Aínda que unha migración de NNID a PNID é teoricamente posible, sería arriscado e requiriría datos confidenciais do usuario que non queremos conservar." + }, + { + "answer": "Para usar Pretendo siga as instrucións da sección Documentos na parte superior.", + "question": "Como empregar Pretendo?" + }, + { + "question": "Podo saber cando unha función/servizo que pretendo estará lista?", + "answer": "Non. Moitas das funcións e servizos de Pretendo desenvólvense de forma independente (por exemplo, un programador pode traballar en Miiverse mentres que outro pode traballar en Contas e Amigos) e, polo tanto, non podemos dar un prazo de entrega estimado." + }, + { + "question": "Pretendo funciona en emuladores como Cemu/Citra?", + "answer": "Pretendo é compatible con calquera cliente que poida interactuar coa Nintendo Network. Actualmente, o único emulador con este tipo de funcionalidades é Cemu. Cemu 2.0 é oficialmente compatible con Pretendo nas opcións de conta de rede do emulador. Para obter información sobre como comezar con Cemu, consulta a documentación.
Citra non admite o xogo real en liña e, polo tanto, non funciona con Pretendo e non mostra ningún signo de ser compatible co xogo real en liña. Mikage, un emulador de 3DS para dispositivos móbiles, pode ofrecer soporte no futuro, aínda que non é certo." + }, + { + "question": "Se me ban de Nintendo Network, tamén se me prohibirá de Pretendo?", + "answer": "Non temos acceso ás prohibicións de Nintendo Network, polo que tampouco se che prohibirá de Pretendo. Non obstante, teremos regras a seguir ao usar o servizo e o incumprimento destas regras pode resultar na prohibición." + }, + { + "question": "Terei a Pretendo de ter soporte é Wii/Switch?", + "answer": "A Wii xa ten servidores personalizados proporcionados por Wiimmfi. Actualmente non queremos apuntar ao Switch, xa que é de pago e completamente diferente da Nintendo Network." + }, + { + "answer": "Si, terás que cortar o teu dispositivo para conectarte; Non obstante, en Wii U só necesitarás acceso ao Homebrew Launcher (é dicir, Haxchi, Coldboot Haxchi ou mesmo o exploit do navegador web), e en 3DS necesitarás a última versión de Luma, máis información en Documentos.", + "question": "Necesito modificar para conectarme?" + } + ], + "title": "Preguntas máis frecuentes" + }, + "showcase": { + "cards": [ + { + "caption": "Traemos os teus xogos e contido favoritos a través de servidores personalizados", + "title": "Servidores de xogos" + }, + { + "title": "Juxtaposition", + "caption": "Unha nova versión de Miiverse, coma se fora creada na era moderna." + }, + { + "title": "Apoio con cemu", + "caption": "Xoga aos teus xogos favoritos de Wii U mesmo sen consola!" + } + ], + "title": "O que facemos", + "text": "O noso proxecto ten moitos compoñentes. Abaixo amósanse algúns deles." + }, + "credits": { + "title": "O equipo", + "text": "Coñece o equipo detrás do proxecto" + }, + "account": { + "settings": { + "settingCards": { + "production": "Produción", + "beta": "Proba", + "hasAccessPrompt": "O teu rango actual dáche acceso ao servidor beta. ¡Brillante!", + "signInHistory": "Historial de inicio de sesión", + "no_edit_from_dashboard": "A edición da configuración PNID desde o panel de usuario non está dispoñible actualmente. Actualiza a configuración do usuario desde a consola de xogos vinculada", + "nickname": "Alcume", + "passwordResetNotice": "Despois de cambiar o contrasinal, pecharase sesión en todos os dispositivos.", + "gender": "Xénero", + "country": "País/Rexión", + "password": "Contrasinal", + "otherSettings": "Outras configuracións", + "discord": "Discord", + "removeDiscord": "Desvincular a conta de Discord", + "noDiscordLinked": "Non tes unha conta de Discord vinculada", + "linkDiscord": "Vincular conta de Discord", + "passwordPrompt": "Introduza o seu contrasinal PNID para descargar ficheiros Cemu", + "no_newsletter_notice": "Newsletter non dispoñible actualmente. Volve consultar máis tarde", + "timezone": "Franxa horaria", + "serverEnv": "Escolle un servidor", + "upgradePrompt": "Os servidores de proba son exclusivos dos probadores.
Para converterse en probador, compra un rango de conta superior.", + "userSettings": "Configuración de usuario", + "profile": "Perfil", + "birthDate": "Aniversario", + "signInSecurity": "cantar e unha seguridade", + "email": "Correo electrónico", + "fullSignInHistory": "Ver historial de inicio de sesión completo", + "connectedToDiscord": "Conectado a Discord como", + "newsletter": "Boletín informativo", + "newsletterPrompt": "Recibe actualizacións do proxecto por correo electrónico (podes cancelar a subscrición en calquera momento)", + "no_signins_notice": "O historial de inicio de sesión non se segue actualmente. Volve comprobar máis tarde!" + }, + "upgrade": "Comprar Rank", + "unavailable": "Non dispoñible" + }, + "loginForm": { + "forgotPassword": "Esqueciches o teu contrasinal?", + "detailsPrompt": "Introduza a continuación os detalles da súa conta", + "confirmPassword": "confirma o contrasinal", + "login": "Acceder", + "username": "Nome de usuario", + "password": "Contrasinal", + "email": "Correo electrónico", + "registerPrompt": "Non tes unha conta?", + "loginPrompt": "Xa tes unha conta?", + "register": "Incribirse", + "miiName": "Nome Mii" + }, + "forgotPassword": { + "sub": "Introduce o teu enderezo de correo electrónico/PNID a continuación", + "submit": "Enviar", + "header": "Esqueceches o contrasinal", + "input": "Enderezo de correo electrónico ou PNID" + }, + "resetPassword": { + "submit": "Enviar", + "confirmPassword": "Confirme o contrasinal", + "header": "Cambie o contrasinal", + "sub": "Introduce o novo contrasinal a continuación", + "password": "contrasinal" + }, + "account": "Conta", + "accountLevel": [ + "Estándar", + "Provador", + "Moderador", + "Desenvolvedor" + ], + "banned": "Prohibido" + }, + "specialThanks": { + "title": "Grazas especiais", + "text": "Sen eles, Pretendo non estaría onde está agora." + }, + "aboutUs": { + "title": "Sobre nós", + "paragraphs": [ + "Pretendo é un proxecto de código aberto que ten como obxectivo recrear a Nintendo Network para 3DS e Wii U mediante enxeñería inversa en sala limpa.", + "Dado que os nosos servizos serían gratuítos e de código aberto, poderían existir mesmo despois do inevitable peche de Nintendo Network." + ] + }, + "progress": { + "githubRepo": "Repositorio de GitHub", + "title": "Progreso" + }, + "discordJoin": { + "title": "Mantéñase ao día", + "text": "Únete ao noso servidor Discord para obter as últimas actualizacións do proxecto.", + "widget": { + "button": "Únete ao servidor", + "text": "Recibe actualizacións en tempo real sobre o noso progreso." + } + }, + "donation": { + "upgradePush": "Para facerte un subscritor e acceder a grandes vantaxes, visita a páxina de actualización.", + "progress": "$${totd} de $${goald}/mes, ${perc}% do obxectivo mensual." + }, + "localizationPage": { + "description": "Pega unha ligazón a unha configuración rexional JSON de acceso público para probala no teu sitio web", + "title": "Localicemos", + "instructions": "Consulta as instrucións de localización", + "fileInput": "Arquivo para probar", + "filePlaceholder": "https://a.link.to/the_file.json", + "button": "Ficheiro de proba" + }, + "footer": { + "socials": "Sociais", + "usefulLinks": "Ligazóns útiles", + "widget": { + "captions": [ + "Queres estar ao día?", + "Únete ao noso servidor Discord!" + ], + "button": "Unirse agora" + }, + "bandwidthRaccoonQuotes": [ + "Son Bandwidth o mapache e encántame mastigar os cables do servidor de Pretendo Network. Yum Yum Yum Isto é xenial! (Mellor que o bocadillo de queixo manchego)", + "Moita xente pregúntanos se por isto imos ter problemas legais con Nintendo; Alégrome de dicir que a miña tía traballa en Nintendo e di que non os teremos.", + "Webkit v537 é a mellor versión de Webkit para Wii U. Non, non estamos portando Chrome a Wii U.", + "Non podo esperar a que o reloxo chegue ás 03:14:08 UTC o 19 de xaneiro de 2038!", + "A Wii U é en realidade unha consola infravalorada: os anuncios eran moi malos, pero a consola é xenial. Agarda, non sei por que, pero o meu controlador non se conectará á miña Wii.", + "O tema principal de Super Mario World 2 - Yoshi's Island é un bop absoluto e non hai forma de que me convenza do contrario.", + "Os meus lanzamentos favoritos de Nintendo Switch foron Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pack e Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Gustouche moito o título da consola virtual de Nintendo Wii U, así que o traeremos de volta\". Realmente demostra que a Nintendo lle importa.", + "Como \"Xa sabes a Ash, bendí o seu corazón, ela está todo o día\" é a forma agradable do sur de dicir \"Ash uwus todo o tempo e é moi raro e estúpido e gustaríame que non o fixesen\".", + "O meu primeiro video na miña canle!!! Levo un tempo querendo facer vídeos, pero o meu portátil estaba actuando bastante mal e non podía executar Fraps, Skype e Minecraft ao mesmo tempo. Pero iso xa acabouse! Cun pouco de axuda do meu profesor de informática, o meu portátil funciona moito mellor e agora podo gravar! Espero que o disfrutedes e se o fas, dálle me gusta e subscríbete!" + ] + }, + "progressPage": { + "title": "O noso progreso", + "description": "Consulta o progreso e os obxectivos do proxecto! (Actualizado aproximadamente cada hora, non reflicte TODOS os obxectivos nin o progreso do proxecto)" + }, + "docs": { + "sidebar": { + "welcome": "Benvido", + "install_extended": "Instalalo pretendo", + "search": "Buscar", + "getting_started": "Comezando", + "install": "Instalar", + "juxt_err": "Código de erro - Juxt (Miiverse)" + }, + "search": { + "no_match": "Non se atoparon coincidencias", + "title": "Tes un código de erro?", + "caption": "Escríbeo no cadro de abaixo para obter información sobre o teu problema.", + "label": "Código de erro" + }, + "quickLinks": { + "header": "ligazóns rápidas", + "links": [ + { + "header": "Instalalo pretendo", + "caption": "Consulte as instrucións de configuración" + }, + { + "caption": "Buscalo aquí", + "header": "Tes algún erro?" + } + ] + }, + "missingInLocale": "Esta páxina non está dispoñible no teu idioma. Vexa a versión en inglés a continuación." + }, + "modals": { + "confirm": "Confirmar", + "cancel": "Cancelar", + "close": "Pechar" + }, + "blogPage": { + "title": "Blog", + "description": "As últimas actualizacións en fragmentos condensados. Se queres ver actualizacións máis frecuentes, considera Doar connosco.", + "published": "Publicado por", + "publishedOn": "é" + }, + "upgrade": { + "month": "Mes", + "back": "De volta", + "title": "Subscríbete", + "unsub": "Cancelar a subscrición", + "unsubPrompt": "Estás seguro de que queres cancelar a subscrición de tiername? Perderás o acceso aos beneficios asociados a ese rango.", + "unsubConfirm": "Cancelar a subscrición", + "description": "Alcanzar o obxectivo mensual fará de Pretendo un traballo a tempo completo, proporcionando actualizacións de mellor calidade a un ritmo máis rápido", + "tierSelectPrompt": "Seleccione un intervalo", + "changeTier": "Cambiar rango", + "changeTierPrompt": "Estás seguro de que queres cancelar a subscrición de oldtiername e subscribirte a newtiername?", + "changeTierConfirm": "Cambiar rango" + } +} diff --git a/locales/hr_HR.json b/locales/hr_HR.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/hr_HR.json @@ -0,0 +1 @@ +{} diff --git a/locales/hu_HU.json b/locales/hu_HU.json new file mode 100644 index 0000000..342c62d --- /dev/null +++ b/locales/hu_HU.json @@ -0,0 +1,457 @@ +{ + "nav": { + "docs": "Dokumentáció", + "credits": "Készítők", + "progress": "Előrehaladás", + "blog": "Blog", + "account": "Fiók", + "donate": "Adományozás", + "accountWidget": { + "settings": "Beállítások", + "logout": "Kijelentkezés" + }, + "dropdown": { + "captions": { + "about": "A projektről", + "faq": "Gyakran ismételt kérdések", + "blog": "A legutolsó frissítéseink, tömören", + "progress": "Ellenőrizd a projekt előrehaladást és célokat", + "credits": "Találkozz a team-mel" + } + }, + "about": "Névjegy", + "faq": "GYIK" + }, + "hero": { + "subtitle": "Játék szerverek", + "buttons": { + "readMore": "Olvass tovább" + }, + "title": "Újra létrehozva", + "text": "A Pretendo egy ingyenes nyílt forrású helyettesítője a Nintendo szervereinek mind a 3DS, mind a Wii U számára lehetővé téve az online kapcsolatot mindenki számára, még az eredeti szerverek leállítása után is" + }, + "aboutUs": { + "title": "Rólunk", + "paragraphs": [ + "A Pretendo egy nyílt forráskódú projekt, aminek célja újra előállítani a Nintendo Network-öt a 3DS és a Wii U számára tiszta visszafejtés technikát alkalmazva.", + "Mivel a szolgáltatásaink egyaránt ingyenesek és nyílt forráskódúak, sokáig léteznek a jövőben." + ] + }, + "progress": { + "title": "Előrehaladás", + "githubRepo": "Github repó" + }, + "faq": { + "title": "Gyakran Ismételt Kérdések", + "text": "Itt van néhány gyakori kérdés, amit tőlünk kérdeztek, a könnyű információhoz jutás érdekében.", + "QAs": [ + { + "question": "Mi a Pretendo?", + "answer": "A Pretendo egy nyílt forrású helyettesítője a Nintendo Network-nek aminek célja, hogy egyedi szervereket készítsen a Wii U és a 3DS család konzoljai számára. Célunk, hogy megőrizzük a funkcionalitását ezen konzoloknak, és lehetővé tegyük a játékosok számára, hogy folytathassák a játékot kedvenc Wii U és 3DS játékaikkal, azok teljes kapacitásával." + }, + { + "answer": "Sajnos nem. A létező NNID-k nem működnek a Pretendo-n, mert a Nintendo birtokolja a felhasználói adatot; habár egy NNID>PNID migráció elméletben lehetséges, kockázatos lenne és szenzitív felhasználói adatot igényel, amit nem szeretnénk birtokolni.", + "question": "Működik a mostani NNID-m a Pretendón?" + }, + { + "question": "Hogyan használhatom a Pretendo-t?", + "answer": "A Pretendo használatának elkezdéséhez 3DS-en, Wii U-n vagy emulátoron, kérjük tekintsd meg a telepítési útmutatónkat!" + }, + { + "question": "Tudjuk mikor lesz a funkció/szolgáltatás kész?", + "answer": "Nem. Sok funkciója/szolgáltatása a Pretendo-nak függetlenül fejlesztett (például a Miiverse-en egy fejlesztő dolgozik, míg a Accounts and Friends-en egy másik), és így nem tudunk egy általános becslést adni, hogy mikorra fog ez elkészülni." + }, + { + "question": "Mikor adtok hozzá további játékokat?", + "answer": "Akkor fogunk új játékokon dolgozni amikor azt érezzük hogy a backend könyvtárunk támogatja, és van egy fejlesztő aki karbantartja. Sok munka megy bele abba hogy stabilizáljuk és befejezzük a meglévő játékokat - Megakarjuk adni a legjobb élményt mielőtt egy új játékra megyünk. Mivel mindig jön új munka, ezért nem tudjuk megmondani mikor lesz ez." + }, + { + "question": "Ha van egy emulátorom, az elég a Pretendo használatához?", + "answer": "Nem. A könnyebb moderáció és biztonság érdekében, az emulátor használatához szükséged lesz egy valódi konzolra is. Ez lehetővé tesz egy biztosabb rendszert és a szabályok hatékonyabb betartattatását, egy élvezetesebb és megbízhatóbb élmény érdekében." + }, + { + "answer": "Cemu 2.1 teljeskörűen támogatja a Pretendo-t a hálózati profil fül alatt az emulátorban. Több információért, hogy hogyan kezdj bele a Cemu-val való online játékba, nézd meg a dokumentációt.
Néhány 3DS emulátor vagy annak forkjai lehet támogatnak minket, de egyenlőre nincs semmilyen hivatalos ajánlásunk vagy telepítési útmutatónk hozzájuk. A Citra legújabb verziója nem támogatja a Pretendo-t.", + "question": "Működik a Pretendo a Cemu emulátoron/más emulátorokon?" + }, + { + "answer": "A Wii-nek már vannak saját szerverei, amit a Wiimmfi biztosít. Jelenleg nem célozzuk meg a Switch-et, mivel fizetős és teljesen más, mint a Nintendo Network.", + "question": "Fogja a Pretendo támogatni a Wii-t/Switch-et?" + }, + { + "answer": "A legjobb élményért a konzolokon, hackelned kell a konzolod - pontosabban Aromával a Wii U-hoz és Luma3DS-el a 3DS-hez, de a Wii U-hoz van hackelés nélküli SSSL megoldás, de limitált hozzáféréssel. Nézd meg a telepítési lépéseket a leírásért.", + "question": "Szükségem van hackelésre a csatlakozáshoz?" + }, + { + "question": "Ha bannolva vagyok a Nintendo hálózaton, ugyanúgy bannolva maradok Pretendón?", + "answer": "Nincs hozzáférésünk a Nintendo hálózat ban listájához, szóval nem fogsz az maradni. De vannak szabályok amiket ha nem követsz akkor az bannolást okozhat." + }, + { + "answer": "Csak privát meccseken - a tisztességtelen előny megszerzése vagy az online élmény megzavarása olyan emberekkel, akik nem járultak hozzá (mint a nyilvános meccseken), tiltás alá esik. Rendszeresen alkalmazunk fiók- és konzoltiltásokat mind a Wii U, mind a 3DS rendszereken. A Pretendo olyan extra biztonsági intézkedéseket alkalmaz, amelyek hatástalanná teszik a hagyományos „unban” módszereket, mint például a sorozatszám megváltoztatása.", + "question": "Lehet-e csalásokat vagy mod-okat online használni a Pretendo-val?" + } + ] + }, + "showcase": { + "title": "Amit mi csinálunk", + "text": "A projektünk sok komponensből áll. Itt van néhány közülük.", + "cards": [ + { + "title": "Játék szerverek", + "caption": "A kedvenc játékaid és tartalmad visszahozása egyedi szerverek használatával." + }, + { + "title": "Juxtaposition", + "caption": "A Miiverse újragondolása, milyen lett volna, ha a modern érában készül." + }, + { + "title": "Cemu támogatás", + "caption": "Játssz a kedvenc Wii U játékaiddal akár konzol nélkül!" + } + ] + }, + "credits": { + "title": "A csapat", + "text": "Ismerd meg a csapatot a projekt mögött", + "people": [ + { + "name": "Jonathan Barrow (jonbarrow)", + "github": "https://github.com/jonbarrow", + "picture": "https://github.com/jonbarrow.png", + "caption": "Project tulajdonos és fő fejlesztő" + }, + { + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat", + "name": "Jemma (CaramelKat)", + "caption": "Miiverse kutató és fejlesztő" + }, + { + "name": "quarky", + "caption": "Wii U kutató és patch fejlesztő", + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky" + }, + { + "caption": "Rendszer kutatás és szerver architektúra", + "github": "https://github.com/SuperMarioDaBom", + "name": "SuperMarioDaBom", + "picture": "https://github.com/supermariodabom.png" + }, + { + "picture": "https://github.com/gitlimes.png", + "name": "Pinklimes", + "caption": "Web fejlesztő", + "github": "https://github.com/gitlimes" + }, + { + "name": "Shutterbug2000", + "caption": "Rendszer kutató és szerver fejlesztő", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000" + }, + { + "github": "https://github.com/InternalLoss", + "picture": "https://github.com/InternalLoss.png", + "name": "Billy", + "caption": "Prezervácionista és szerver architektúra" + }, + { + "name": "DaniElectra", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra", + "caption": "Rendszer kutatás és szerver fejlesztés" + }, + { + "github": "https://github.com/hauntii", + "name": "niko", + "caption": "Web és szerver fejlesztés", + "picture": "https://github.com/hauntii.png" + }, + { + "name": "MatthewL246", + "caption": "DevOps és közösségi munka", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "name": "wolfendale", + "caption": "Szerver fejlesztés és optimalizáció", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "3DS patch fejlesztés és kutatás", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" + } + ] + }, + "footer": { + "bandwidthRaccoonQuotes": [ + "Én vagyok a Bandwidth mosómedve, szeretem rágcsálni a Pretendo Network szerverek kábeleit. Nyam-nyam!", + "Sokan kérdezik, hogy nem fogunk-e jogi problémába keveredni a Nintendo-val e miatt; Boldogan mondhatom, hogy a nénikém a Nintendo-nál dolgozik, és azt mondja, hogy szerinte ez rendben van.", + "A Webkit v537 a legjobb verziója a Webkit a Wii U-ra. Nem, nem fogjuk portolni a Chrome-ot a Wii U-ra.", + "Alig bírok várni arra, hogy az óra elérje a 2038 január 19-én a 03:14:08 UTC időpontot!", + "A Wii U tulajdonképpen egy alulértékelt rendszer: a reklámok nagyon rosszak voltak, de a konzol nem. Hú, várj egy percet, nem tudom miért nem csatlakozik a Gamepad-om a Wii-omhoz.", + "Super Mario World 2 - Yoshi's Island's főcím zenéje abszolút bop, és semmiképpen sem fogsz meggyőzni az ellenkezőjéről.", + "A kedvenc Nintendo Switch kiadásaim: a Nintendo Switch Online + Expansion Pack, a Nintendo Switch Online + Rumble Pak, a Nintendo Switch Online + Offline Play Pack, a Nintendo Switch Online + Yet Another Port Pack és a Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Nagyon szeretted a Nintendo Wii U Virtual Console-t szóval visszahozzuk\" Pack. Tényleg elmondhatod, hogy a Nintendo figyel rád.", + "Az \"Ismered Ash-t, áldd meg a szívét, egész nap UwUzik.\" a déli kedves módja annak, hogy \"Ash uwuzik minden alkalommal, és ez nagyon furcsa és hülye, és azt kívánom, bárcsak ne”", + "Első videóm a csatornámon!! Már régóta szertem volna videókat készíteni, de a laptopom elég rosszul ment, és nem tudtam egyszerre futtatni a fraps-t, a skype-ot és a minecraftot. de most vége! informatika tanárom segítségével a laptopom sokkal jobban működik, és már tudok rögzíteni! remélem tetszeni fog és ha igen nyomj egy like-ot és iratkozz fel!!!", + "Jónak tűnik nekem" + ], + "socials": "Szociális", + "usefulLinks": "Hasznos linkek", + "widget": { + "captions": [ + "Szeretnél naprakész lenni?", + "Csatlakozz a Discord szerverünkhöz." + ], + "button": "Csatlakozz most!" + } + }, + "account": { + "loginForm": { + "loginPrompt": "Rendelkezel már fiókkal?", + "username": "Felhasználónév", + "registerPrompt": "Nem rendelkezel fiókkal?", + "password": "Jelszó", + "forgotPassword": "Elfelejtetted a jelszavad?", + "login": "Belépés", + "register": "Regisztráció", + "detailsPrompt": "Add meg a fiók adataid alább", + "confirmPassword": "Jelszó megerősítése", + "email": "Email", + "miiName": "Mii név" + }, + "forgotPassword": { + "submit": "Elküld", + "input": "Email cím vagy PNID", + "header": "Elfelejtett jelszó", + "sub": "Add meg az email címed/PNID azonosítód alább" + }, + "resetPassword": { + "header": "Jelszó alaphelyzetbe állítása", + "sub": "Add meg az új jelszót alább", + "password": "Jelszó", + "confirmPassword": "Jelszó megerősítése", + "submit": "Elküld" + }, + "settings": { + "settingCards": { + "profile": "Profil", + "beta": "Béta", + "nickname": "Becenév", + "otherSettings": "Egyéb beállítások", + "upgradePrompt": "A béta szerverek exkluzívak a béta tesztelők számára.
Ahhoz, hogy béta tesztelővé válj, bővíts egy magasabb csomagra.", + "signInHistory": "Bejelentkezési előzmények", + "discord": "Discord", + "fullSignInHistory": "Teljes bejelentkezési előzmény megtekintése", + "newsletterPrompt": "A projekt frissítéseiről értesítés emailben (bármikor kikapcsolható)", + "userSettings": "Felhasználói beállítások", + "birthDate": "Születési dátum", + "gender": "Nem", + "country": "Ország/régió", + "timezone": "Időzóna", + "serverEnv": "Szerver környezet", + "production": "Éles", + "hasAccessPrompt": "A jelenlegi csomag hozzáférést ad a béta szerverekhez. Király!", + "signInSecurity": "Bejelentkezés és biztonság", + "email": "Email", + "password": "Jelszó", + "passwordResetNotice": "A jelszavad módosítása után ki leszel jelentkezve minden eszközöddel.", + "connectedToDiscord": "Csatlakozva a Discordhoz, mint", + "removeDiscord": "Discord fiók eltávolítása", + "noDiscordLinked": "Nincs Discord fiók kapcsolva.", + "linkDiscord": "Discord fiók hozzákapcsolása", + "newsletter": "Hírlevél", + "passwordPrompt": "Add meg a PNID jelszavad, hogy letölthesd a Cemu fájlokat", + "no_signins_notice": "A bejelentkezési előzmények jelenleg nem követettek. Nézz vissza később!", + "no_newsletter_notice": "A hírlevél jelenleg nem elérhető. Nézz vissza később!", + "no_edit_from_dashboard": "A PNID beállítások szerkesztése a vezérlőpultról jelenleg nem elérhető. Kérjük módosítsd a felhasználói beállításaid a csatlakoztatott játék konzolodról" + }, + "upgrade": "Fiók bővítése", + "unavailable": "Nem elérhető" + }, + "accountLevel": [ + "Normál", + "Tesztelő", + "Moderátor", + "Fejlesztő" + ], + "banned": "Kitiltott", + "account": "Fiók" + }, + "blogPage": { + "title": "Blog", + "description": "A legutolsó frissítések tömören. Ha szeretnél sűrűbb frissítéseket látnit, gondolkozz el a támogatásunkon.", + "published": "Kiadta:", + "publishedOn": "ekkor:" + }, + "upgrade": { + "title": "Bővítés", + "unsubPrompt": "Biztos, hogy le szeretnél iratkozni a tiername csomagról? Azonnal el fogod veszíteni a hozzáférést az ehhez a csomaghoz kapcsolódó cuccokhoz.", + "changeTier": "Csomag módosítása", + "description": "Ha havi cél elérése a Pretendo-t teljes munkaidős munkává teszi, ez jobb minőségű frissítéseket és nagyobb fejlesztési sebességet biztosít.", + "month": "hónap", + "tierSelectPrompt": "Válassz egy csomagot", + "unsub": "Leiratkozás", + "unsubConfirm": "Leiratkozás", + "changeTierPrompt": "Biztos, hogy le szeretnél iratkozni a(z) oldtiername csomagról és feliratkozni a(z) newtiernamecsomagra?", + "changeTierConfirm": "Csomag módosítása", + "back": "Vissza" + }, + "specialThanks": { + "title": "Külön köszönet", + "text": "Nélkülük a Pretendo nem lenne ott ahol ma van.", + "people": [ + { + "github": "https://github.com/PretendoNetwork", + "name": "GitHub hozzájárulók", + "caption": "Fordtások és egyéb hozzájárulások", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" + }, + { + "caption": "crunch library fejlesztés", + "name": "superwhiskers", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers" + }, + { + "name": "Stary", + "caption": "3DS fejlesztés és NEX darabokra szedés", + "picture": "https://github.com/Stary2001.png", + "github": "https://github.com/Stary2001" + }, + { + "caption": "Miiverse információ megosztás", + "picture": "https://github.com/rverseTeam.png", + "name": "rverse", + "github": "https://twitter.com/rverseClub" + }, + { + "name": "Kinnay", + "special": "Különleges köszönet", + "caption": "Kutatás a Nintendo adatstruktúrákról", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay" + }, + { + "name": "NinStar", + "caption": "Ikonok a Mii Editor-hoz és a Juxt reakciókhoz", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12", + "name": "Rambo6Glaz", + "caption": "Konzol kutatás és játék szerverek" + }, + { + "name": "GaryOderNichts", + "caption": "Wii U patch fejlesztés", + "picture": "https://github.com/GaryOderNichts.png", + "github": "https://github.com/GaryOderNichts" + }, + { + "name": "zaksabeast", + "caption": "3DS patch készítő", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast" + }, + { + "name": "mrjvs", + "caption": "Szerver architektúra", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload", + "name": "binaryoverload", + "caption": "Szerver architektúra" + }, + { + "caption": "Splatoon forgatások és kutatás", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22", + "name": "Simonx22" + }, + { + "name": "OatmealDome", + "caption": "Splatoon forgatások és kutatás", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome" + }, + { + "name": "GitHub hozzájárulók", + "caption": "Fordítások és egyéb hozzájárulások", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + } + ] + }, + "discordJoin": { + "title": "Maradj napra kész", + "text": "Csatlakozz a Discord szerverünkhöz, hogy megszerezd a legutolsó frissítéseket a projektről.", + "widget": { + "text": "Kapj valós időben frissítéseket az előrehaladásunkról", + "button": "Csatlakozz a szerverhez" + } + }, + "progressPage": { + "title": "Előrehaladásunk", + "description": "Tekintsd meg a projekt előrehaladását és céljait! (Minden órában frissítve, így nem tükröz minden projekt célt vagy az előrehaladást." + }, + "donation": { + "progress": "$${totd} a $${goald}/hó, ${perc}% a havi célból.", + "upgradePush": "Hogy előfizetővé válhass, és hozzáférj király cuccokhoz, látogasd meg a bővítés oldalt." + }, + "localizationPage": { + "title": "Fordíts", + "description": "Illessz be egy linket egy publikusan elérhető JSON fordításra, hogy tesztelhesd a weboldalon", + "instructions": "Tekintsd meg a fordítási útmutatókat", + "fileInput": "Tesztelendő fájl", + "filePlaceholder": "https://a.link.to/the_file.json", + "button": "Teszt fájl" + }, + "docs": { + "missingInLocale": "Ez az oldal nem érhető el a nyelveden. Kérjük nézd meg az angol verziót alább.", + "quickLinks": { + "header": "Gyors linkek", + "links": [ + { + "header": "Pretendo telepítés", + "caption": "A telepítési lépések megtekintése" + }, + { + "header": "Hibát kaptál?", + "caption": "Keress rá itt" + } + ] + }, + "search": { + "title": "Hibakódot kaptál?", + "caption": "Írd be az a keretbe alább, hogy információt kapj a problémáról!", + "label": "Hiba kód", + "no_match": "Nem található egyezés" + }, + "sidebar": { + "getting_started": "Kezdeti lépések", + "welcome": "Köszöntjük", + "install_extended": "Pretendo telepítése", + "install": "Telepítés", + "search": "Keresés", + "juxt_err": "Hibakódok - Juxt" + } + }, + "modals": { + "cancel": "Mégsem", + "confirm": "Megerősít", + "close": "Bezár" + }, + "notfound": { + "description": "Hoppá! Nem találjuk ezt az oldalt." + } +} diff --git a/locales/id_ID.json b/locales/id_ID.json new file mode 100644 index 0000000..a098614 --- /dev/null +++ b/locales/id_ID.json @@ -0,0 +1,80 @@ +{ + "nav": { + "about": "Tentang", + "docs": "Dokumentasi", + "credits": "Kredit", + "progress": "Kemajuan", + "account": "Akun", + "accountWidget": { + "settings": "Pengaturan", + "logout": "Keluar" + }, + "dropdown": { + "captions": { + "credits": "Berkenalan dengan Tim", + "progress": "Lihat kemajuan dan tujuan proyek", + "faq": "Pertanyaan yang sering diajukan", + "about": "Tentang projek", + "blog": "Update terbaru kami, secara singkat" + } + }, + "faq": "Pertanyaan Umum", + "blog": "Berita", + "donate": "Donasi" + }, + "hero": { + "title": "Dibuat ulang", + "subtitle": "Server gim", + "text": "Pretendo adalah sebuah pengganti server Nintendo yang gratis dan dengan sumber terbuka untuk 3DS dan Wii U, yang memungkinkan konektivitas online untuk semua, bahkan setelah server aslinya dihentikan", + "buttons": { + "readMore": "Baca lebih lanjut" + } + }, + "aboutUs": { + "title": "Tentang kami", + "paragraphs": [ + "Pretendo adalah proyek sumber terbuka dengan tujuan untuk membuat ulang Nintendo Network untuk 3DS dan Wii U menggunakan rekaya terbalik ruang bersih.", + "Karena layanan kami bersifat gratis dan sumber terbuka, layanan tersebut akan tetap bertahan lama setelah penutupan Nintendo Network yang pasti akan terjadi." + ] + }, + "progress": { + "title": "Perkembangan", + "githubRepo": "Repositori Github" + }, + "faq": { + "text": "Berikut adalah beberapa pertanyaan umum yang sering diajukan kepada kami untuk mendapatkan informasi yang mudah.", + "QAs": [ + { + "question": "Apa itu Pretendo?" + }, + { + "answer": "Sayangnya, tidak. NNIDs yang sudah ada tidak bisa digunakan di Pretendo, karena hanya Nintendo memegang data user mu; sedangkan migrasi dari NNID-ke-PNID secara teori memungkinkan, itu bisa berisiko dan membutuhkan data user sensitif yang kami tidak ingin memiliki.", + "question": "Apakah NNID yang ada bekerja di Pretendo?" + }, + { + "question": "Bagaimana saya mengunakan Pretendo?", + "answer": "Untuk memulai dengan Jaringan Pretendo di 3DS, Wii U atau emulator, mohon melihat instruksi setup kami!" + }, + {}, + { + "question": "Kapan akan kamu tambahkan lebih banyak game?" + }, + { + "question": "Jika aku menggunakan emulator, apakah itu cukup untuk menggunakan Pretendo?" + }, + {}, + { + "question": "Akankah Pretendo mendukung Wii/Switch?" + }, + {}, + { + "question": "Jika aku di-banned di Jaringan Nintendo, Apakah aku tetap ter-banned saat menggunakan Pretendo?" + } + ], + "title": "Pertanyaan yang sering diajukan" + }, + "modals": { + "close": "Tutup", + "cancel": "Batal" + } +} diff --git a/locales/it_IT.json b/locales/it_IT.json index 4eb9614..eeedff1 100644 --- a/locales/it_IT.json +++ b/locales/it_IT.json @@ -1,12 +1,12 @@ { "nav": { - "about": "Info", + "about": "Informazioni", "faq": "FAQ", "docs": "Documentazione", "credits": "Riconoscimenti", "progress": "Progresso", "blog": "Blog", - "account": "Account", + "account": "Profilo", "accountWidget": { "settings": "Impostazioni", "logout": "Logout" @@ -16,9 +16,9 @@ "captions": { "credits": "Incontra il team", "about": "Riguardo al progetto", - "faq": "Domande chieste frequentemente", + "faq": "Domande frequenti", "blog": "I nostri ultimi aggiornamenti, sintetizzati", - "progress": "Controlla lo stato di avanzamento del progetto e gli obiettivi" + "progress": "Controlla lo stato del progetto e gli obiettivi" } } }, @@ -34,7 +34,7 @@ "title": "Informazioni", "paragraphs": [ "Pretendo è un progetto open source con l'obiettivo di ricreare Nintendo Network per 3DS e Wii U utilizzando ingegneria inversa clean-room.", - "Visto che i nostri server saranno gratuiti e open source, essi potranno esistere anche dopo l'inevitabile chiusura di Nintendo Network." + "Visto che i nostri server saranno gratuiti e open source, essi potranno esistere per molto tempo nel futuro." ] }, "progress": { @@ -55,27 +55,39 @@ }, { "question": "Come si usa Pretendo?", - "answer": "Pretendo non è ancora in uno stato tale da poter essere usata dal pubblico. Tuttavia, quando lo sarà potrai usare Pretendo semplicemente eseguendo il nostro patcher homebrew sulla tua console." + "answer": "Per iniziare con Pretendo Network su 3DS, Wii U o emulatori, vedi le nostre istruzioni di configurazione!" }, { - "question": "Sapete quando una determinata funzionalità/servizio sarà pronta/o?", + "question": "Tra quanto tempo sarà pronta questa funzionalità/servizio?", "answer": "No. Molte delle funzionalità/servizi di Pretendo sono sviluppate indipendentemente (per esempio, uno sviluppatore potrebbe lavorare su Miiverse mentre un altro sta lavorando su Account e Amici) e per questo non possiamo fornire una stima del tempo mancante al completamento." }, { - "question": "Pretendo funziona su Cemu/emulatori?", - "answer": "Pretendo supporta qualsiasi client in grado di connettersi a Nintendo Network. Al momento l'unico emulatore con questa capacità è Cemu. Cemu 2.0 supporta ufficialmente Pretendo nelle opzioni dell'account di rete dell'emulatore. Per informazioni su come impostare Pretendo su Cemu, visita la documentazione.
Citra non supporta le funzionalità di gioco online reali, quindi non funziona con Pretendo; inoltre, non mostra segni di poter funzionare in futuro. Mikage, un emulatore di 3DS per dispositivi mobili, potrebbe fornire supporto in futuro, ma questo è tutt'altro che certo." + "question": "Quando saranno aggiunti più giochi?", + "answer": "Lavoriamo su giochi nuovi quando sentiamo che le nostre librerie backend siano pronte per supportarli e c'è tempo di sviluppo a disposizione per mantenerli. Gran parte del nostro lavoro consiste nel rendere stabili e completi i nostri giochi esistenti - vogliamo offrire la miglior esperienza possibile in quelli prima di passare a nuovi titoli. Poiché nuovi lavori sorgono costantemente, non possiamo fare alcuna stima di quando ciò potrebbe accadere." }, { - "question": "Se sono bannato su Nintendo Network, rimarrò bannato quando userò Pretendo?", - "answer": "Noi non avremo accesso alla lista degli utenti bannati da Nintendo Network, quindi quegli utenti non saranno bannati sul nostro servizio. Ci saranno comunque regole da seguire mentre si usa il servizio, e il mancato rispetto di queste regole potrebbe portare a un ban." + "question": "Se utilizzo un emulatore, sarà sufficiente per utilizzare Pretendo?", + "answer": "No. Per scopi di sicurezza e moderazione, per usare un emulatore hai comunque bisogno di una console reale. Questo ci permette di migliorare la sicurezza e di applicare meglio le regole al fine di fornire un'esperienza sicura e piacevole con il nostro servizio." + }, + { + "question": "Pretendo funziona su Cemu/emulatori?", + "answer": "Cemu 2.1 supporta ufficialmente Pretendo nelle opzioni del tuo account di rete nell'emulatore. Per ulteriori informazioni su Cemu, dai un'occhiata alla documentazione. Alcuni emulatori 3DS o loro fork potrebbero supportarci, ma non abbiamo nessuna raccomandazione ufficiale o istruzioni di configurazione in questo momento. Le ultime versioni di Citra non supportano pretendo." }, { "question": "Pretendo supporterà la Wii/Switch?", - "answer": "La Wii dispone già di server custom forniti da Wiimmfi. Al momento non abbiamo intenzione di supportare la Switch poiché il suo servizio online è a pagamento e completamente diverso da Nintendo Network." + "answer": "Esistono già server custom per la Wii, forniti da Wiimmfi. Per quanto riguarda la Switch, non rientra nei nostri piani attuali, poiché i suoi servizi sono a pagamento e completamente diversi da quelli del Nintendo Network." }, { - "question": "Dovrò modificare la mia console per connettermi?", - "answer": "Sì, dovrai modificare il tuo dispositivo per connetterti; tuttavia, sulla Wii U è sufficiente poter accedere all'Homebrew Launcher (via Haxchi, Coldboot Haxchi, o anche solo l'exploit web per browser). Informazioni su come connettersi su 3DS saranno fornite in futuro." + "question": "Dovrò moddare la console per connettermi?", + "answer": "Per la migliore esperienza sulle console, dovrai installare un custom firmware (CFW) - in particolare con Aroma su Wii U e Luma3DS su 3DS. Tuttavia, su Wii U, puoi utilizzare il metodo SSSL, senza modifiche ma con funzionalità limitate. Consulta la nostra guida all'installazione per maggiori dettagli." + }, + { + "answer": "Non abbiamo accesso alla lista dei ban di Nintendo Network, quindi non sarai bannato automaticamente. Tuttavia, abbiamo regole da seguire per l'utilizzo del servizio e non rispettarle potrebbe comportare in un ban.", + "question": "Se sono stato bannato sul Nintendo Network, rimarrò bannato anche da Pretendo?" + }, + { + "question": "Posso usare cheat o mod online con Pretendo?", + "answer": "Soltanto nei match privati - ottenere un vantaggio ingiusto o rovinare l'esperienza online con persone che non hanno acconsentito (ad esempio nei match pubblici) è un'infrazione punibile con un ban. Banniamo regolarmente account e console sia su Wii U che su 3DS. Pretendo usa misure di sicurezza aggiuntive che rendono inefficaci i metodi tradizionali di evasione dei ban come cambiare il proprio numero di serie." } ] }, @@ -99,11 +111,172 @@ }, "credits": { "title": "Il team", - "text": "Incontra il team dietro al progetto" + "text": "Incontra il team dietro al progetto", + "people": [ + { + "name": "Jonathan Barrow (jonbarrow)", + "github": "https://github.com/jonbarrow", + "picture": "https://github.com/jonbarrow.png", + "caption": "Proprietario del progetto e sviluppatore principale" + }, + { + "name": "Jemma (CaramelKat)", + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat", + "caption": "Ricercatore e sviluppo di Miiverse" + }, + { + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "name": "quarky", + "caption": "Ricercatore e sviluppo delle patch per Wii U" + }, + { + "name": "SuperMarioDaBom", + "github": "https://github.com/SuperMarioDaBom", + "picture": "https://github.com/supermariodabom.png", + "caption": "Ricerca di sistemi e architettura dei server" + }, + { + "caption": "Sviluppo web", + "github": "https://github.com/gitlimes", + "name": "pinklimes", + "picture": "https://github.com/gitlimes.png" + }, + { + "name": "Shutterbug2000", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000", + "caption": "Ricerca dei sistemi e sviluppo del server" + }, + { + "picture": "https://github.com/InternalLoss.png", + "name": "Billy", + "github": "https://github.com/InternalLoss", + "caption": "Preservazionista e architettura server" + }, + { + "name": "DaniElectra", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra", + "caption": "Ricerca sui sistemi e sviluppo server" + }, + { + "picture": "https://github.com/hauntii.png", + "name": "niko", + "caption": "Sviluppo dei server e web", + "github": "https://github.com/hauntii" + }, + { + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246", + "name": "MatthewL246", + "caption": "DevOps e lavoro nella community" + }, + { + "name": "wolfendale", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale", + "caption": "Sviluppo e ottimizzazione dei server" + }, + { + "github": "https://github.com/TraceEntertains", + "name": "TraceEntertains", + "caption": "Sviluppo patch 3DS e ricerca", + "picture": "https://github.com/TraceEntertains.png" + } + ] }, "specialThanks": { "title": "Ringraziamenti speciali", - "text": "Senza di loro, Pretendo non sarebbe dove è oggi." + "text": "Senza di loro, Pretendo non sarebbe dove è oggi.", + "people": [ + { + "caption": "Localizzazioni e altri contributi", + "name": "Contributori GitHub", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "github": "https://github.com/superwhiskers", + "name": "superwhiskers", + "caption": "Sviluppo libreria crunch", + "picture": "https://github.com/superwhiskers.png" + }, + { + "name": "Stary", + "picture": "https://github.com/Stary2001.png", + "github": "https://github.com/Stary2001", + "caption": "Sviluppo 3DS e del dissettore NEX" + }, + { + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub", + "name": "rverse", + "caption": "Condivisione di informazioni riguardo Miiverse" + }, + { + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "github": "https://github.com/Kinnay", + "special": "Ringraziamenti speciali", + "name": "Kinnay", + "caption": "Ricerca sulle strutture dati Nintendo" + }, + { + "name": "NinStar", + "caption": "Icone per lo Studio Mii e reazioni Juxt", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "caption": "Ricerca console e server di gioco", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12", + "name": "Rambo6Glaz" + }, + { + "picture": "https://github.com/GaryOderNichts.png", + "github": "https://github.com/GaryOderNichts", + "name": "GaryOderNichts", + "caption": "Sviluppo patch Wii U" + }, + { + "name": "zaksabeast", + "caption": "Creatore patch 3DS", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast" + }, + { + "picture": "https://github.com/mrjvs.png", + "name": "mrjvs", + "caption": "Architettura server", + "github": "https://github.com/mrjvs" + }, + { + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload", + "name": "binaryoverload", + "caption": "Architettura server" + }, + { + "name": "Simonx22", + "caption": "Rotazioni di Splatoon e ricerca", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "name": "OatmealDome", + "caption": "Rotazioni di Splatoon e ricerca", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome" + }, + { + "name": "Contributori GitHub", + "caption": "Localizzazioni e altri contributi", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + } + ] }, "discordJoin": { "title": "Tieniti aggiornato", @@ -132,7 +305,8 @@ "Il tema principale di Super Mario World 2 - Yoshi's Island è un bop assurdo e non riuscirai mai a convincermi del contrario.", "I miei titoli preferiti per Nintendo Switch sono Nintendo Switch Online + Pacchetto aggiuntivo, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Pacchetto gioco offline, Nintendo Switch Online + Pacchetto l'ennesima port e Nintendo Switch Online + Pacchetto Brain Training del Dr. Kawashima: Quanti anni ha il tuo cervello? \"Il titolo Virtual Console per Wii U vi è piaciuto così tanto che abbiamo deciso di rimetterlo in vendita.", "Tipo \"Conosci Ash, Dio benedica la sua anima, dice UwU tutto il giorno\" è il modo del sud degli Stati Uniti per dire \"Ash dice uwu costantemente ed è molto strano e stupido e vorrei tanto che non lo facesse\"", - "Il mio primo video sul mio canale!! voglio fare video da un sacco di tempo ma il mio laptop era lento e non riuscivo a far andare fraps, skype e minecraft insieme. ma ora non più! il mio maestro di informatica mi ha aiutato e il mio laptop va molto più veloce e ora riesco a registrare! spero che vi piaccia e se si per favore mettete like e iscrivetevi!!!" + "Il mio primo video sul mio canale!! voglio fare video da un sacco di tempo ma il mio laptop era lento e non riuscivo a far andare fraps, skype e minecraft insieme. ma ora non più! il mio maestro di informatica mi ha aiutato e il mio laptop va molto più veloce e ora riesco a registrare! spero che vi piaccia e se si per favore mettete like e iscrivetevi!!!", + "Mi sembra a posto" ] }, "progressPage": { @@ -167,8 +341,6 @@ "registerPrompt": "Non hai un account?" }, "settings": { - "downloadFilesDescription": "(non funzioneranno su Nintendo Network)", - "downloadFiles": "Scarica file dell'account", "settingCards": { "profile": "Profilo", "nickname": "Nickname", @@ -258,7 +430,7 @@ } }, "upgrade": { - "unsubPrompt": "Sei sicuro di voler annullare l'iscrizione a tiername? Perderai tutte le ricompense associate a quel livello.", + "unsubPrompt": "Sei sicuro di voler annullare l'iscrizione a tiername? Perderai tutte le ricompense immediatamente associate a quel livello.", "description": "Raggiungere il goal mensile renderà Pretendo un lavoro a tempo pieno, permettendo di fornire aggiornamenti di maggiore qualità in meno tempo.", "month": "mese", "tierSelectPrompt": "Seleziona un livello", @@ -278,5 +450,8 @@ "donation": { "progress": "$${totd} di $${goald}/mese, ${perc}% del goal mensile.", "upgradePush": "Per diventare un abbonato e accedere a ricompense speciali, visita la pagina per fare l'upgrade." + }, + "notfound": { + "description": "Oops! Non siamo riusciti a trovare questa pagina." } } diff --git a/locales/ja_JP.json b/locales/ja_JP.json index b74164f..5cccead 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -1,257 +1,429 @@ { "nav": { - "about": "紹介", - "faq": "Q&A", - "docs": "ドキュメント", + "about": "Pretendoについて", + "faq": "よくある質問", + "docs": "Wiki", "credits": "クレジット", - "progress": "進行状況", + "progress": "進捗", "blog": "ブログ", "account": "アカウント", + "donate": "寄付", "accountWidget": { "settings": "設定", "logout": "ログアウト" }, "dropdown": { "captions": { - "credits": "チームご紹介", - "about": "プロジェクトについて", - "blog": "最新のアップデート", - "progress": "プロジェクトの進行状況と目的をチェックして", + "credits": "チームをご紹介します", + "about": "このプロジェクトについて", + "blog": "最新のアップデート(簡易版)", + "progress": "プロジェクトの進行状況と目的を確認", "faq": "よくある質問" } - }, - "donate": "寄付" + } }, "hero": { - "subtitle": "ネットワークサービス", - "title": "復活した", - "text": "Pretendo(プリーテンドー)は、任天堂の3DSとWii Uネットワークサービスは終了するなら、みんなの楽しみが続けてることになるの無料とオープンソース復活です", + "subtitle": "オンラインを", + "title": "取り戻す", + "text": "Pretendo(プリテンドー)は、ニンテンドー3DSとWii Uの無料かつオープンソースの代替サーバーです。公式サーバーが稼働停止したあとも、オンライン接続を実現します。", "buttons": { - "readMore": "もっと読む" + "readMore": "続きを読む" } }, "aboutUs": { - "title": "私たちについて", + "title": "Pretendo について", "paragraphs": [ - "Pretendo(プリーテンドー)は、3DSとWii Uのニンテンドーネットワーク「クリーンルーム・リバースエンジニアリング」で復活ねらうことのオープンソースプロジェクトである。", - "私達のサービスは無料であり、コードが公開されているので、ニンテンドーネットワークが終了してからも末永く運営されることが出来ます。" + "Pretendoは、公式のものに代わって3DSとWii Uのニンテンドーネットワークをつくることを目的としたオープンソースのプロジェクトです。", + "Pretendo のサービスは無料、そしてオープンソースであり、ニンテンドーネットワークが終了してからも継続して利用することができます。" ] }, "progress": { - "title": "進行状況", - "githubRepo": "GitHub リポジトリ" + "title": "進捗", + "githubRepo": "GitHubリポジトリ" }, "faq": { "title": "よくある質問", - "text": "よくある質問を紹介します。", + "text": "よくある質問への回答一覧です。", "QAs": [ { - "question": "Pretendo とはなんですか?", - "answer": "Pretendo とは、ニンテンドー 3DS と Wii U のニンテンドー ネットワークのカスタム代替サーバーを構築するオープンソース プロジェクトです。Pretendo の目的は、オンライン機能を維持させて、お気に入りのゲーム タイトルを最大限にプレイし続けられるようにすることです。" + "question": "Pretendoって何?", + "answer": "Pretendoは Wii Uと3DSシリーズのカスタムサーバーを作ろうとしている、オープンソースのニンテンドーネットワーク代替プロジェクトです。私たちの目標はこれらのオンライン機能を維持させ、プレイヤーたちがお気に入りのゲームを全機能をもって長い間できるようにすることです。" }, { - "question": "ニンテンドー ネットワーク ID(NNID)は Pretendo でも利用できますか?", - "answer": "いいえ、残念ですが利用できません。NNID のデータはニンテンドー ネットワークに保存されているため、Pretendo で利用することはできません。NNID をプリテンドー ネットワーク ID(PNID)に変換することもできますが、リスクが高く、機密性の高いユーザー データが必要になります。" + "question": "ニンテンドーネットワーク ID(NNID)は Pretendoでもつかえる?", + "answer": "残念ながら不可能です。NNIDのデータは任天堂だけがアクセスできるため、Pretendoからは利用できません。理論上NNIDをプリテンドーネットワークID(PNID)への変換は可能ですが、リスクが高く機密情報を必要とします。" }, { - "question": "Pretendo を使用するにはどうしたらよいですか?", - "answer": "Pretendo はまだ公開できるほど開発が進んでいません。準備が整ったら、Homebrew パッチを実行しただけで Pretendo を使用できるようになります。" + "question": "Pretendoの使い方は?", + "answer": "3DS、Wii U、エミュレーターでPretendo Networkを使うには、セットアップの手順をご覧ください!" }, { - "question": "機能やサービスはいつ完成しますか?", - "answer": "詳しくはわかりません。Pretendo の機能は各自で開発されています。例えば、とあるユーザーが Miiverse 機能を開発しているとき、アカウント / フレンド機能は別のユーザーが開発している状態になります。そのため、全体的な完成の予想時間はわかりません。" + "question": "機能やサービスが完成するのはいつ?", + "answer": "正確にはわかりません。Pretendoの機能は各々で開発が進んでいます。例として、ある人がMiiverseを開発しているとき、並行して別の開発者がアカウント/フレンド機能を開発しています。そのため、全体の完成予定時間の予測は困難です。" }, { - "question": "Pretendo は Cemu などのエミュレーターで機能しますか?", - "answer": "Pretendo はニンテンドー ネットワークに接続できるすべてのクライアントに対応します。現在、Pretendo に対応しているエミュレーターは Cemu だけです。Cemu 2.0 はエミュレーターのネットワーク アカウント設定で Pretendo を正式に対応しています。詳しくは、Cemu を使用して Pretendo に接続する方法をご確認ください。
Citra は完全なオンライン プレイに対応していないため、Pretendo では機能しません。スマートフォン向けの 3DS エミュレーターの Mikage は、対応するかどうかは決定していません。" + "question": "さらに多くのゲームのサポートはいつ追加されますか?", + "answer": "私たちはバックエンドが新しいゲームをサポートするのに十分で、なおかつ新しいゲームを管理するのに十分な時間のある開発者がいると感じたときのみ新しいゲームのサポートに動きます。ほとんどの労力は既存のゲームのサポートを安定させ、完成させることに行きます。私たちはできるだけ既存のゲームのサポートを良くしてから新しいゲームのサポートを始めます。仕事は常に増えていくので、それがいつになるのかはわかりません。" }, { - "question": "ニンテンドー ネットワークで BAN されたプレイヤーは、Pretendo を利用できませんか?", - "answer": "Pretendo はニンテンドー ネットワークの BAN 情報を取得できないため、最初はすべてのユーザーは BAN されていません。このサービスには利用規約を導入するため、違反した場合は BAN されることがあります。" + "question": "Pretendoはエミュレーターでも使えるの?", + "answer": "いいえ。セキュリティーと管理のために、エミュレーターがあっても、ゲーム機本体が必要です。これによって、セキュリティーが強化され、安全で楽しめる体験のためのルールの適用などが効果的になります。" }, { - "question": "Pretendo は Wii や Nintendo Switch に対応しますか?", - "answer": "WiiはWiimmfiによってカスタムが提供されています。Switchに関しては、有料であり、ニンテンドーネットワークと完全に異なるので、対応しかねません。" + "question": "Cemuやその他のエミュレーターでも接続できる?", + "answer": "Cemu 2.1は、エミュレーターでのネットワークアカウントのオプションでPretendoを公式にサポートしています。Cemuでの使用を開始する方法については、ドキュメントをご覧ください。
一部の3DSエミュレーターまたは、フォークはサポートをしている可能性がありますが、現時点では公式の推奨事項やセットアップ手順はありません。なお、Citraの最終ビルドはPretendoをサポートしていません。" }, { - "question": "接続するには改造が必要ですか?", - "answer": "はい、接続するにはあなたのゲーム機器を改造しなくてはいけません。ですが、Wii UではHomebrew Launcherへのアクセスだけで接続できます。(Haxchi、Coldboot Haxchi、Webブラウザエクスプロイトなど) 3DSの接続方法に関しては後で公開します。" + "question": "WiiやNintendo Switchでもつかえる?", + "answer": "WiiにはWiimmfiという代替サーバーがあります。Switchのネットワーク機能は有料であること、またニンテンドーネットワークとは全く異なることから、対応することはありません。" + }, + { + "question": "つなげるには改造が必要?", + "answer": "最適な環境でプレイするなら、ゲーム機を改造する必要があります。Wii UではAromaを、3DSではLuma3DSをです。しかしWii Uでは、改造しなくても機能が限られたSSSLで接続できます。詳しくは、セットアップガイドをご覧ください。" + }, + { + "question": "ニンテンドーネットワークでBANされていたら、PretendoでもBANされるの?", + "answer": "PretendoはニンテンドーネットワークのBAN情報にアクセスすることができないため、PretendoへBANが引き継がれることはありません。ただし、Pretendoの定めたルールに違反するとBANされることがあります。" + }, + { + "question": "Pretendoに接続中に、チートやモッドを使えますか?", + "answer": "フレンドマッチ中なら許可されます。他のプレーヤーの同意なし(世界中の人とプレイ中など)に、不正な利益を得たりオンライン体験を妨害したりする行為は、禁止されており、BAN対象となる場合があります。3DSでもWii Uでもアカウントやゲーム機に対するBAN処分をよくします。Pretendoはシリアル番号の変更など、従来の「BAN」を無効にする改造に対する追加のセキュリティ対策を使用しています。" } ] }, "showcase": { - "title": "私たちが作るもの", - "text": "私たちのプロジェクトは色んな部分に分かれています。その一部を紹介します。", + "title": "Pretendoがつくるもの", + "text": "Pretendoプロジェクトは多くの部品に分かれています。以下はその一部です。", "cards": [ { "title": "ゲームサーバー", - "caption": "カスタムサーバーを使ってユーザーたちの好きなゲームとコンテンツを蘇らせます。" + "caption": "カスタムサーバーによって、あのゲームやあのコンテンツを取り戻します。" }, { "title": "Juxtaposition", - "caption": "現代に作られたような、Miiverseの再製作。" + "caption": "Miiverseが、現代に生まれ変わります。" }, { "title": "Cemuサポート", - "caption": "あなたの好きなWii Uタイトルを、Wii Uなしでプレイできます!" + "caption": "本体なしでも、あのWii Uゲームをプレイしよう!" } ] }, "credits": { "title": "開発チーム", - "text": "プロジェクトの裏のチームをご覧ください" + "text": "プロジェクトを支えるチームの紹介", + "people": [ + { + "caption": "プロジェクトオーナーおよび主な開発者", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow", + "name": "Jonathan Barrow (jonbarrow)" + }, + { + "caption": "Miiverseの研究と開発", + "name": "Jemma (CaramelKat)", + "github": "https://github.com/CaramelKat", + "picture": "https://github.com/caramelkat.png" + }, + { + "caption": "Wii Uの研究、パッチの開発", + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "name": "quarky" + }, + { + "name": "SuperMarioDaBom", + "caption": "システムの研究とサーバーアーキテクチャ", + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom" + }, + { + "caption": "Webの開発", + "github": "https://github.com/gitlimes", + "name": "pinklimes", + "picture": "https://github.com/gitlimes.png" + }, + { + "name": "Shutterbug2000", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "caption": "システムの研究とサーバーの開発", + "github": "https://github.com/shutterbug2000" + }, + { + "github": "https://github.com/InternalLoss", + "caption": "プリザベーションとサーバーアーキテクチャ", + "picture": "https://github.com/InternalLoss.png", + "name": "Billy" + }, + { + "caption": "システムの研究とサーバーの開発", + "github": "https://github.com/DaniElectra", + "picture": "https://github.com/danielectra.png", + "name": "DaniElectra" + }, + { + "caption": "Webとサーバーの開発", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii", + "name": "niko" + }, + { + "caption": "DevOpsとコミュニティの活動", + "picture": "https://github.com/MatthewL246.png", + "name": "MatthewL246", + "github": "https://github.com/MatthewL246" + }, + { + "caption": "サーバーの開発と最適化", + "name": "wolfendale", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains", + "caption": "3DSのパッチ開発と研究" + } + ] }, "specialThanks": { "title": "スペシャルサンクス", - "text": "彼らげいなかったら、Pretendoは存在しなかっただろうと思います。" + "text": "Pretendoのいまの姿を作り上げた方たちです。", + "people": [ + { + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork", + "name": "GitHubでの貢献者", + "caption": "翻訳とその他の貢献" + }, + { + "name": "superwhiskers", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers", + "caption": "Crunchのライブラリ開発" + }, + { + "name": "Stary", + "picture": "https://github.com/Stary2001.png", + "caption": "3DSの開発とNEXディセクター", + "github": "https://github.com/Stary2001" + }, + { + "name": "rverse", + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub", + "caption": "Miiverseの情報共有" + }, + { + "special": "スペシャルサンクス", + "name": "Kinnay", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "caption": "Nintendoのデータ構造に関する研究", + "github": "https://github.com/Kinnay" + }, + { + "caption": "アイコンの制作(MiiエディターとJuxtのリアクション)", + "name": "NinStar", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "caption": "コンソールの研究とゲームサーバー", + "name": "Rambo6Glaz", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12" + }, + { + "caption": "Wii Uパッチの開発", + "github": "https://github.com/GaryOderNichts", + "name": "GaryOderNichts", + "picture": "https://github.com/GaryOderNichts.png" + }, + { + "caption": "3DSパッチの作者", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "name": "zaksabeast", + "github": "https://github.com/zaksabeast" + }, + { + "caption": "サーバーアーキテクチャ", + "name": "mrjvs", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "caption": "サーバーアーキテクチャ", + "name": "binaryoverload", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload" + }, + { + "caption": "Splatoon のローテーションと研究", + "name": "Simonx22", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "name": "OatmealDome", + "caption": "Splatoon ローテーションと研究", + "picture": "https://github.com/OatmealDome.png", + "github": "https://github.com/OatmealDome" + }, + { + "caption": "翻訳とその他の貢献", + "name": "GitHubの貢献者", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + } + ] }, "discordJoin": { - "title": "情報を見逃さないで", - "text": "プロジェクトの最新情報を取得するには、私たちのDiscordサーバーに参加してください。", + "title": "最新情報を入手する", + "text": "プロジェクトの最新情報を入手するには、Pretendo の Discord サーバーに参加してください。", "widget": { - "text": "進行状況の最新アップデートをもらいましょう", + "text": "進捗状況の最新情報を入手しましょう", "button": "サーバーに参加" } }, "footer": { - "socials": "ソーシャル", - "usefulLinks": "関係リンク", + "socials": "SNS", + "usefulLinks": "役立つリンク", "widget": { "captions": [ - "アップデートを多くもらいたいですか?", - "Discordサーバーに参加してください!" + "最新情報を入手しますか?", + "Discordサーバーへ参加しよう!" ], - "button": "すぐ参加する!" + "button": "参加する!" }, "bandwidthRaccoonQuotes": [ - "僕はアライグマのBandwidthだよ!Pretendo Networkのサーバーを繋いでいる電線を噛むのが好きなんだ。美味しい!", - "みんな、任天堂と法的に問題ができるんじゃないか、と質問してくるね。ぼくのおばさんが任天堂で働いてるけど、大丈夫だって。", - "Webkit v537がWii U用の最高のWebkitのバージョンだよ。ううん、ChromeをWii Uには移さないよ。", - "時計が 2038 年 1 月 19 日の 03:14:08 UTC に達するのが待ちきれません!", - "Wii U は実際には過小評価されているシステムです。コマーシャルは本当にひどいものでしたが、コンソールは素晴らしいです。えっと、ちょっと待ってください、理由はわかりませんが、ゲームパッドが Wii に接続されていません。", - "スーパー マリオ ワールド 2 - ヨッシー アイランドのメイン テーマは絶対的なバップです。", - "私のお気に入りの Nintendo Switch リリースは、Nintendo Switch Online + Expansion Pack、Nintendo Switch Online + Rumble Pak、Nintendo Switch Online + Offline Play Pack、Nintendo Switch Online + Yet Another Port Pack、Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain です。エイジ「ニンテンドーWii Uバーチャルコンソールタイトルを本当に気に入ってくれたので、復活させます」パック。あなたは本当に任天堂が気にかけていると言うことができます.", + "ボクはアライグマの Bandwidth だよ!Pretendo ネットワークのサーバーを繋いでいるケーブルを噛むのが好きなんだ!(´~`)モグモグ...", + "みんな「任天堂に怒られないの?」って質問してくるね。ボクのおばさんが任天堂で働いてるけど、大丈夫だって~!", + "Webkit v537がWii U用の最高のWebkitのバージョンだよ。いや、ChromeはWii Uに移さないよ。", + "2038年1月19日の12時14分08秒(日本時間) になるのが楽しみだな~!", + "Wii Uって人気なさすぎだよね~。たしかに、イメージは薄かったけど、遊んでみれば最高だったよ!あれ、ちょっとまって…なんかゲームパッドがWiiに繋がらないんだけど?", + "スーパーマリオ ヨッシーアイランドのメイン テーマはいい曲だよね~!", + "ボクのお気に入りのNintendo Switchの作品は、Nintendo Switch Online + 追加パック、Nintendo Switch Online + 振動パック、Nintendo Switch Online + Offlineパック、Nintendo Switch Online + 非公式ポートパック、Nintendo Switch Online + 脳を鍛える大人のトレーニング ~Wii Uバーチャルコンソールが本当に人気なので、復活させます~ パック。任天堂はよくわかってるよね~。", "「あなたはアッシュを知っている、彼女の心を祝福しなさい、彼女は一日中UwUの」というように、南部の素敵な言い方です \"Ash uwusはいつも、それは本当に奇妙で愚かで、私は彼らがそうしなかったらいいのに\"", - "私のチャンネルでの私の最初のビデオ!! iv 長い間ビデオを作りたいと思っていましたが、ラップトップの動作がかなり悪く、fraps、skype、minecraft を一度に実行できませんでした。しかし、今は終わりです! IT の先生の助けを借りて、ラップトップの動作が大幅に改善され、録音できるようになりました。皆さんが楽しんでくれることを願っています。!!!" + "ボクのチャンネルで最初の動画を公開したよ!!前から動画を作りたいと思っていたけど、ボクのノートパソコンの調子が悪くってね、Fraps とか Skype とか Minecraft を同時に起動できなかったんだよね~。でも、もうだいじょうぶ!IT の先生に聞いてみたら、ノートパソコンの動作が良くなって、録音もできるようになったんだ!よかったら高評価とチャンネル登録してね!", + "僕には良い感じに見えるね" ] }, "progressPage": { "title": "進行状況(英語)", - "description": "プロジェクトの進行度とゴールをチェックできます! (1時間ぐらいごとにアップデート、すべてのプロジェクトゴールや進行状況は反映しない)" + "description": "プロジェクトの進行状況と目標を確認できます。 (およそ1時間ごとに更新 & すべての目標やプロジェクトが表示されているわけではありません)" }, "blogPage": { "title": "ブログ(英語)", - "description": "", - "publishedOn": "の上", - "published": "発行者" + "description": "最新情報のまとめです。支援することで、より頻繁に情報を受け取れます。", + "publishedOn": "公開日時:", + "published": "執筆者:" }, "localizationPage": { "title": "レッツローカライズ", "description": "公開されているJSONへのリンクを貼り付けてこのサイトに試してみて下さい", "instructions": "ローカライズ方法を開く", - "fileInput": "試してみるファイル", + "fileInput": "テスト用ファイル", "filePlaceholder": "https://a.link.to/the_file.json", - "button": "ファイルを試す" + "button": "テストファイル" }, "docs": { - "missingInLocale": "このページは日本語に翻訳されていません。下記の英語版をご覧ください。", + "missingInLocale": "このページはお住まいの地域では利用できません。以下の英語版をご確認ください。", "quickLinks": { "header": "クイックリンク", "links": [ { - "header": "Pretendoをインストール", - "caption": "設定手順を見る" + "header": "Pretendoのインストール", + "caption": "セットアップの手順を表示する" }, { "header": "エラーが発生しましたか?", - "caption": "ここで検索する" + "caption": "ここで検索してください" } ] }, "sidebar": { "install": "インストール", - "search": "探す", + "search": "検索", "juxt_err": "エラーコード - Juxt", "getting_started": "入門", - "welcome": "いらっしゃいませ", + "welcome": "ようこそ", "install_extended": "Pretendo をインストールする" }, "search": { - "caption": "下のボックスに入力して、問題に関する情報を入手してください!", + "caption": "下にエラーコードを入力して、エラーを検索できます。", "label": "エラーコード", "no_match": "一致するものが見つかりませんでした", - "title": "エラーコードを取得しましたか?" + "title": "エラーコードが表示されましたか?" } }, "account": { "settings": { - "downloadFiles": "アカウントファイルをダウンロード", - "downloadFilesDescription": "(ニンテンドーネットワークでは動作しません)", "upgrade": "アカウントのアップグレード", - "unavailable": "利用不可", + "unavailable": "利用できません", "settingCards": { "userSettings": "ユーザー設定", "profile": "プロフィール", "nickname": "ニックネーム", "timezone": "タイムゾーン", "beta": "ベータ", - "upgradePrompt": "ベータ サーバーはベータ テスター専用です。
ベータ テスターになるには、より高いアカウント ティアにアップグレードしてください。", - "signInSecurity": "サインインとセキュリティ", - "email": "Eメール", + "upgradePrompt": "ベータ サーバーはベータ テスター専用です。
ベータ テスターになるには、より高いレベルのアカウントにアップグレードしてください。", + "signInSecurity": "ログインとセキュリティ", + "email": "メールアドレス", "password": "パスワード", - "passwordResetNotice": "パスワードを変更すると、すべてのデバイスからサインアウトされます。", - "signInHistory": "サインイン履歴", - "fullSignInHistory": "サインイン履歴をすべて表示する", - "connectedToDiscord": "Discord に接続済み", - "newsletterPrompt": "プロジェクトの最新情報をメールで受け取る (いつでもオプトアウトできます)", + "passwordResetNotice": "パスワードを変更すると、すべてのデバイスからログアウトされます。", + "signInHistory": "ログイン履歴", + "fullSignInHistory": "ログイン履歴をすべて表示する", + "connectedToDiscord": "Discord に連携済み:", + "newsletterPrompt": "プロジェクトの最新情報をメールで受け取る (いつでも配信停止できます)", "passwordPrompt": "Cemu ファイルをダウンロードするには、PNID パスワードを入力してください", - "no_edit_from_dashboard": "現在、ユーザー ダッシュボードから PNID 設定を編集することはできません。リンクしたゲーム機からユーザー設定を更新してください", + "no_edit_from_dashboard": "現在、WebサイトからのPNID設定の編集には対応していません。ログインしているゲーム機から設定を編集してください。", "gender": "性別", "country": "国/地域", - "production": "製造", - "hasAccessPrompt": "現在のレベルでは、ベータ サーバーへのアクセスが提供されます。涼しい!", + "production": "本番環境", + "hasAccessPrompt": "現在のレベルでは、ベータ サーバーへアクセスできます。", "newsletter": "ニュースレター", - "discord": "不和", - "noDiscordLinked": "Discord アカウントがリンクされていません。", + "discord": "Discord", + "noDiscordLinked": "Discord アカウントが連携されていません。", "birthDate": "生年月日", "serverEnv": "サーバー環境", "otherSettings": "その他の設定", - "removeDiscord": "Discord アカウントを削除する", - "linkDiscord": "Discordアカウントをリンクする", - "no_signins_notice": "サインイン履歴は現在追跡されていません。後でもう一度確認してください。!", - "no_newsletter_notice": "ニュースレターは現在利用できません。後でもう一度確認してください" + "removeDiscord": "Discord アカウントの連携を解除", + "linkDiscord": "Discordアカウントを連携する", + "no_signins_notice": "ログイン履歴は現在追跡されていません。後でもう一度ご確認ください。", + "no_newsletter_notice": "ニュースレターは現在利用できません。後でもう一度ご確認ください。" } }, "accountLevel": [ - "標準\\", + "スタンダード", "テスター", - "モデレータ", + "モデレーター", "デベロッパー" ], - "banned": "禁止された", + "banned": "BAN されました", "loginForm": { - "register": "登録", - "detailsPrompt": "以下にアカウントの詳細を入力してください", + "register": "アカウントを作成", + "detailsPrompt": "ログイン情報を入力してください", "username": "ユーザー名", "password": "パスワード", - "email": "Eメール", - "miiName": "みいの名前", - "loginPrompt": "すでにアカウントをお持ちですか?", + "email": "メールアドレス", + "miiName": "Mii の名前", + "loginPrompt": "すでにアカウントをお持ちの場合", "login": "ログイン", - "confirmPassword": "パスワードを認証する", - "forgotPassword": "パスワードをお忘れですか?", - "registerPrompt": "アカウントをお持ちでない場合?" + "confirmPassword": "パスワードの確認", + "forgotPassword": "パスワードを忘れた場合", + "registerPrompt": "アカウントをお持ちでない場合" }, "account": "アカウント", "forgotPassword": { - "header": "パスワードをお忘れの方", - "sub": "以下にメールアドレス/PNIDを入力してください。", - "input": "電子メールアドレスまたはPNID", + "header": "パスワードを忘れた場合", + "sub": "以下にメールアドレスまたは PNID を入力してください。", + "input": "メールアドレスまたは PNID", "submit": "送信" }, "resetPassword": { - "header": "パスワードリセット", - "sub": "新しいパスワードを以下に入力", + "header": "パスワードのリセット", + "sub": "以下に新しいパスワードを入力してください", "password": "パスワード", "confirmPassword": "パスワードの確認", "submit": "送信" @@ -259,24 +431,27 @@ }, "upgrade": { "title": "アップグレード", - "description": "毎月の目標を達成すると、Pretendo はフルタイムの仕事になり、より良い品質の更新をより速い速度で提供します。", + "description": "毎月の目標を達成すると、Pretendoを仕事にすることができ、より良いアップデートを高頻度で開発できるようになります。", "month": "月", - "changeTier": "ティアを変更", - "changeTierPrompt": "oldtiername の登録を解除し、newtiername を登録してもよろしいですか?", + "changeTier": "レベルを変更", + "changeTierPrompt": "oldtiername の登録を解除し、newtiername を登録しますか?", "back": "戻る", - "changeTierConfirm": "ティアを変更", - "unsub": "登録解除", - "unsubConfirm": "登録解除", - "tierSelectPrompt": "ティアを選択", - "unsubPrompt": "tiername から退会してもよろしいですか?そのティアに関連付けられた特典にアクセスできなくなります。" + "changeTierConfirm": "レベルを変更", + "unsub": "登録を解除", + "unsubConfirm": "登録を解除", + "tierSelectPrompt": "レベルを選択", + "unsubPrompt": "tiername から退会しますか?そのレベルに関連付けられた特典にアクセスできなくなります。" }, "donation": { - "progress": "$${totd}/月 $${goald}、月間目標の ${perc}%。", + "progress": "$${totd}/$${goald}(寄付額/目標) ー 月間目標の ${perc}%の寄付を頂いています。", "upgradePush": "サブスクライバーになってクールな特典にアクセスするには、アップグレード ページにアクセスしてください。" }, "modals": { + "cancel": "キャンセル", "confirm": "確認", - "close": "近い", - "cancel": "キャンセル" + "close": "閉じる" + }, + "notfound": { + "description": "おっと!このページは見つかりません。" } } diff --git a/locales/kk_KZ.json b/locales/kk_KZ.json index 7512a74..6831744 100644 --- a/locales/kk_KZ.json +++ b/locales/kk_KZ.json @@ -161,8 +161,6 @@ "email": "Пошта" }, "settings": { - "downloadFiles": "Аккаунтының ақпаратты жүктеу", - "downloadFilesDescription": "(Nintendo Network-пен жұмыс істемейді)", "upgrade": "Аккаунтты жақсарту", "unavailable": "Қолжетімсіз", "settingCards": { diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 95b7344..eed789f 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -1,6 +1,6 @@ { "nav": { - "about": "···에 대하여", + "about": "소개", "faq": "FAQ", "docs": "문서", "credits": "크레딧", @@ -24,7 +24,7 @@ }, "hero": { "subtitle": "게임 서버", - "title": "재창조", + "title": "게임 서버", "text": "Pretendo는 무료이며 3DS와 Wii U를 위한 Nintendo의 서버의 오픈 소스 대체제이고, 원래 서버가 닫힌 된 후에도 모두를 위해 온라인 연결을 제공합니다", "buttons": { "readMore": "더 읽어보기" @@ -55,27 +55,38 @@ }, { "question": "Pretendo는 어떻게 접속하나요?", - "answer": "Pretendo는 아직 공용으로 사용할 수 없습니다. 그러나, 사용이 가능해지면 콘솔에서 홈브루 패쳐를 작동시키면 접속할 수 있게 될 것입니다." + "answer": "Pretendo 네트워크를 3DS에서나 Wii U, 혹은 에뮬레이터에서 접속하려면, 먼저 설치 방법을 확인 해 주세요!" }, { - "question": "기능/서비스가 언제 준비될지 알고 싶나요?", + "question": "어떤 기능/서비스가 언제 준비되나요?", "answer": "아니요. 대부분의 Pretendo 기능/서비스는 독립적으로 개발되고 있기 때문에 (예를 들어, 한 개발자가 Miiverse의 작업을 하고 있을 때 계정과 친구 서비스는 다른 개발자가 작업함), 예상 시간은 말씀드릴 수 없습니다." }, { - "question": "Pretendo가 Cemu/에뮬레이터에서 작동하나요?", - "answer": "Pretendo는 Wii U와 3DS 하드웨어만을 대상으로 제작하고 있습니다. 현재까지 닌텐도 네트워크 지원이 되는 에뮬레이터는 Cemu 뿐이나, Cemu는 공식적으로 커스텀 서버를 지원하지 않습니다. 그러나 Cemu에서도 Pretendo를 이용할 수 있게 될 것입니다. Pretendo는 아직 Cemu를 지원하지 않습니다." + "question": "게임들이 언제 더 추가되나요?", + "answer": "저희는 저희 백엔드 서비스들이 (기반 서비스)들의 지원이 뒷받혀주고 어떤 개발자의 시간이 비었을때 새로운 게임의 서비스를 개발합니다. 대부분 저희가 일하는 것은 현재 지원하는 게임들의 서비스를 완벽하게 만들고 최적화하는데 집중하는데, 그 이유는 먼저 시작한 서비스를 완벽하게 하고 싶기 때문이죠. 버그나 오류가 계속 나오니, 언제부터 새 게임의 서비스를 개발할지는 저희도 모릅니다." }, { "question": "제가 닌텐도 네트워크에서 영구 정지가 되어 있다면 Pretendo Network에서도 영구 정지된 상태일까요?", - "answer": "저희는 닌텐도 네트워크의 영구 정지 리스트에 대한 권한이 없기 때문에, 저희 서비스를 사용할 때 정지가 되지는 않을 겁니다. 그러나, 저희는 저희만의 운영원칙이 있을 것이며, 그에 따르지 않는 것은 결국 영구 정지에 이어질 것입니다." + "answer": "아니요. 서비스의 보안과 검열을 위해서, 에뮬레이터를 사용하시더라도 실제로 게임기를 소유하셔야 합니다. 이렇게 함으로써 더 강화된 보안과 더 즐거운 서비스를 저희가 제공할 수 있습니다." }, { - "question": "Pretendo가 Wii/스위치를 지원하나요?", + "question": "Pretendo가 Cemu나 다른 에뮬레이터에서 작동하나요?", "answer": "Wii의 서비스는 이미 Wiimmfi가 제공하고 있습니다. 스위치의 Nintendo Switch Online은 유료이며 닌텐도 네트워크와 전혀 다르기 때문에, 현재로서도 지원할 계획은 없습니다." }, { "question": "연결하려면 해킹이 필요한가요?", "answer": "네, 연결하기 위해 콘솔 해킹은 필요할 것입니다. 다만, Wii U에서는 홈브루 런처의 접근 권한만 있으면 됩니다 (예. Haxchi, Coldboot Haxchi, 웹 브라우저 취약점). 3DS에서의 연결 방법은 추후에 공개될 것입니다." + }, + { + "answer": "최고의 경험을 위해서는, 게임기를 해킹하셔야 합니다. 특히 Wii U의 Aroma와 3DS의 Luma3DS로요. 그런데, Wii U에서는, 기능은 제한되있지만 해킹 없이 사용할 수 있는 SSSL 방식도 사용 하실 수 있습니다. 더 많은 정보는 이 문서를 참고하세요." + }, + { + "answer": "저희는 닌텐도 네트워크의 밴 기록을 알 수 없기 때문에, 닌텐도 네트워크에서의 밴이 그대로 이어지지 않습니다. 다만, 저희도 저희만의 규칙이 있기 때문에, 저희의 규칙을 따르지 않으신다면 밴을 당하실 수 있습니다.", + "question": "제가 닌텐도 네트워크에서 밴을 당했었다면, Pretendo에서도 밴이 그대로 유지될까요?" + }, + { + "answer": "비공개 매치에서만 가능합니다. 공개 매치에서 다른 사람들의 게임 경험을 망치는 것은 충분히 밴의 이유가 될 수 있습니다. 저희는 꾸준하게 Wii U 및 3DS 기기들을 밴하고, 또한 Pretendo에서는 닌텐도 네트워크에서 가능했던 시리얼 번호를 바꾸는 등의 방법으로 '밴 해제'를 막는 추가 보안이 적용되어 있습니다.", + "question": "치트나 모드를 Pretendo에서 사용해도 되냐요?" } ] }, @@ -99,11 +110,35 @@ }, "credits": { "title": "개발 팀", - "text": "이 프로젝트 뒤에 있는 팀을 만나보세요" + "text": "이 프로젝트 뒤에 있는 팀을 만나보세요", + "people": [ + { + "caption": "프로젝트 제작자이자 프로젝트를 이끄는 개발자" + }, + { + "caption": "Miiverse 연구와 개발" + }, + { + "caption": "Wii U 연구 및 패치 개발" + } + ] }, "specialThanks": { "title": "Special Thanks", - "text": "이들이 없었으면, Pretendo는 이 자리에 없었을 겁니다." + "text": "이들이 없었으면, Pretendo는 이 자리에 없었을 겁니다.", + "people": [ + {}, + {}, + {}, + {}, + { + "caption": "닌텐도 자료구조 연구" + }, + {}, + { + "caption": "게임기 연구 및 게임 서버" + } + ] }, "discordJoin": { "title": "최신 정보", @@ -141,7 +176,7 @@ }, "blogPage": { "title": "블로그", - "description": "", + "description": "최신 소식을 게시합니다. 만약 소식을 더 자주 보고 싶으시다면, 저희를 후원해 주세요..", "published": "게시자", "publishedOn": "켜기" }, @@ -167,23 +202,113 @@ "caption": "여기서 검색하기" } ] + }, + "search": { + "caption": "에러 코드를 아래 칸에 입력하여 문제에 대한 정보를 얻으세요!", + "label": "에러 코드", + "no_match": "일치하는 결과 없음", + "title": "에러 코드를 마주했나요?" + }, + "sidebar": { + "getting_started": "시작하기", + "install_extended": "Pretendo 설치", + "juxt_err": "에러 코드 - Juxt", + "search": "검색", + "welcome": "환영합니다", + "install": "설치" } }, "modals": { "close": "닫기", - "cancel": "취소" + "cancel": "취소", + "confirm": "승인" }, "account": { "loginForm": { "password": "비밀번호", "confirmPassword": "비밀번호 확인", "email": "이메일", - "miiName": "미이 이름", + "miiName": "Mii 이름", "detailsPrompt": "아래에 계정 정보를 입력하세요.", "login": "로그인", "register": "등록하기", - "username": "사용자 이름" + "username": "사용자 이름", + "forgotPassword": "비밀번호를 잊으셨나요?", + "registerPrompt": "계정이 없으신가요?", + "loginPrompt": "이미 계정을 가지고 계신가요?" }, - "account": "계정" + "account": "계정", + "settings": { + "settingCards": { + "profile": "프로필", + "nickname": "닉네임", + "gender": "성별", + "country": "국가/지역", + "timezone": "시간대", + "serverEnv": "서버 환경", + "userSettings": "사용자 설정", + "birthDate": "생일", + "beta": "베타", + "production": "프로덕션", + "passwordPrompt": "Cemu 파일을 다운받으려면 PNID 비밀번호를 입력하세요", + "upgradePrompt": "베타 서버는 베타 테스터에게만 제공됩니다.
베타 테스터가 되시려면, 계정을 더 높은 티어로 업그레이드하세요.", + "fullSignInHistory": "전체 로그인 기록 보기", + "otherSettings": "기타 설정", + "discord": "디스코드", + "connectedToDiscord": "디스코드에 연결된 계정:", + "removeDiscord": "디스코드 계정 삭제", + "noDiscordLinked": "연결된 디스코드 계정이 없습니다.", + "linkDiscord": "디스코드 계정 연결", + "newsletter": "뉴스레터", + "hasAccessPrompt": "당신의 현재 티어로 베타 서버에 접근할 수 있습니다. 멋지네요!", + "signInSecurity": "로그인 및 보안", + "email": "이메일", + "password": "비밀번호", + "passwordResetNotice": "비밀번호를 변경하고 나면, 모든 기기에서 로그아웃됩니다.", + "no_newsletter_notice": "현재 뉴스레터가 제공되지 않습니다. 나중에 다시 확인하세요", + "signInHistory": "로그인 기록", + "newsletterPrompt": "프로젝트 소식 업데이트를 이메일로 받기(언제든 취소할 수 있습니다)", + "no_edit_from_dashboard": "유저 대시보드에서 PNID 설정 변경은 현재 제공되지 않습니다. 계정을 연결한 게임 콘솔에서 변경하세요.", + "no_signins_notice": "로그인 기록이 아직 기록되지 않았습니다. 나중에 다시 확인하세요!" + }, + "upgrade": "계정 업그레이드", + "unavailable": "이용할 수 없음" + }, + "forgotPassword": { + "header": "비밀번호 찾기", + "input": "이메일 주소 또는 PNID", + "submit": "제출", + "sub": "아래에 이메일 주소/PNID를 입력해 주세요." + }, + "resetPassword": { + "header": "비밀번호 재설정", + "sub": "아래에 새 비밀번호를 입력하세요", + "password": "비밀번호", + "confirmPassword": "비밀번호 확인", + "submit": "제출" + }, + "accountLevel": [ + "일반", + "테스터", + "모더레이터", + "개발자" + ], + "banned": "이용 정지됨" + }, + "upgrade": { + "changeTierConfirm": "티어 변경", + "back": "뒤로", + "tierSelectPrompt": "티어 선택", + "unsub": "구독 취소", + "unsubPrompt": "정말로 tiername?을 구독 취소하시겠습니까? 해당 티어가 제공하는 혜택을 더 이상 받을 수 없을 것입니다.", + "unsubConfirm": "구독 취소", + "changeTier": "티어 변경", + "title": "업그레이드", + "changeTierPrompt": "정말로 oldtiername를 취소하고 newtiername를 구독하시겠습니까?", + "month": "달" + }, + "donation": { + "progress": "$${goald}/월 중에서 $${totd} , 매달 목표의 ${perc}%.", + "upgradePush": "구독자가 되고 멋진 혜택을 받으시려면, 업그레이드 페이지를 방문하세요." } } diff --git a/locales/lt_LT.json b/locales/lt_LT.json index 0967ef4..1d1ae1b 100644 --- a/locales/lt_LT.json +++ b/locales/lt_LT.json @@ -1 +1,31 @@ -{} +{ + "nav": { + "about": "Apie", + "faq": "DUK", + "credits": "Kreditai", + "progress": "Progresas", + "blog": "Dienoraštis", + "account": "Paskyra", + "donate": "Dovanoti", + "accountWidget": { + "settings": "Nustatymai", + "logout": "Atsijungti" + }, + "dropdown": { + "captions": { + "credits": "Susipažink su komanda", + "blog": "Naujausi mūsų atnaujinimai, sutrumpinti", + "progress": "Patikrinkite projekto eigą ir tikslus", + "about": "Apie projektas", + "faq": "Klausimas" + } + } + }, + "hero": { + "title": "Atkurta", + "subtitle": "Žaidimo Serveris", + "buttons": { + "readMore": "Skaityti daugiau" + } + } +} diff --git a/locales/lv_LV.json b/locales/lv_LV.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/lv_LV.json @@ -0,0 +1 @@ +{} diff --git a/locales/nb_NO.json b/locales/nb_NO.json index 54943b7..7d00030 100644 --- a/locales/nb_NO.json +++ b/locales/nb_NO.json @@ -96,7 +96,12 @@ }, "credits": { "title": "Laget", - "text": "Møt laget bak prosjektet" + "text": "Møt laget bak prosjektet", + "people": [ + { + "caption": "Prosjekteier og hovedutvikler" + } + ] }, "specialThanks": { "title": "Spesiell takk", diff --git a/locales/nl_NL.json b/locales/nl_NL.json index 2732493..a6f8ade 100644 --- a/locales/nl_NL.json +++ b/locales/nl_NL.json @@ -1,9 +1,9 @@ { "nav": { - "about": "Over", + "about": "Over ons", "faq": "FAQ", "docs": "Docs", - "credits": "Krediet", + "credits": "Bijdragers", "progress": "Vooruitgang", "blog": "Blog", "account": "Account", @@ -25,7 +25,7 @@ "hero": { "subtitle": "Spelservers", "title": "Nagemaakt", - "text": "Pretendo is een gratis en open source vervanger voor de servers van Nintendo voor de 3DS en de Wii U, zodat iedereen online kan spelen, zelfs als de Nintendo servers permanent gestopt worden", + "text": "Pretendo is een gratis en open source vervanger voor de servers van Nintendo voor de 3DS en Wii U, zodat iedereen online kan spelen, zelfs als de Nintendo-servers permanent gestopt worden", "buttons": { "readMore": "Lees meer" } @@ -33,13 +33,13 @@ "aboutUs": { "title": "Over ons", "paragraphs": [ - "Pretendo is een open source project met het doel om het Nintendo Network voor 3DS en Wii U na te maken met clean-room reverse engineering.", + "Pretendo is een open source project met het doel om het Nintendo Network voor de 3DS en Wii U na te maken met clean-room reverse engineering.", "Omdat onze diensten gratis en open source zijn, kunnen ze lang na het sluiten van Nintendo Network bestaan." ] }, "progress": { "title": "Vooruitgang", - "githubRepo": "GitHub repository" + "githubRepo": "GitHub-repository" }, "faq": { "title": "Veelgestelde vragen", @@ -66,8 +66,8 @@ "answer": "Pretendo wordt voornamelijk ontwikkeld voor de hardware van de Wii U en 3DS. Momenteel is de enige emulator met NN ondersteuning, Cemu. Cemu ondersteunt officieel geen custom servers, maar het zou alsnog mogelijk moeten zijn om Pretendo te gebruiken in Cemu. Momenteel ondersteunt Pretendo Cemu niet." }, { - "question": "Als ik van Nintendo Network gebanned ben, blijf ik dan gebanned op Pretendo?", - "answer": "Nee. We hebben geen toegang tot de bans van Nintendo Network, dus je zal niet direct gebanned zijn op onze dienst. Echter zullen wij wel regels hebben bij het gebruik van onze diensten. Als je deze breekt, zal je gebanned worden." + "question": "Werkt Pretendo op Cemu/emulators?", + "answer": "Cemu 2.1 ondersteunt Pretendo officieel onder uw netwerkaccountopties in de emulator. Voor informatie over hoe u aan de slag kunt met Cemu, bekijkt u de documentatie.
Sommige 3DS-emulators of forks ondersteunen ons mogelijk, maar we hebben op dit moment geen officiële aanbevelingen of installatie-instructies. De laatste builds van Citra ondersteunen Pretendo niet." }, { "question": "Gaat Pretendo ook de Wii of Switch ondersteunen?", @@ -75,13 +75,27 @@ }, { "question": "Heb ik hacks nodig om te verbinden met Pretendo?", - "answer": "ja, je zal inderdaad je apparaat moeten hacken. Op de Wii U heb je enkel de Homebrew launcher (d.m.v bijvoorbeeld Haxchi, Coldboot Haxchi, of zelfs de web browser exploit) nodig. Over de 3DS plaatsen we in de toekomst meer informatie." + "answer": "Voor de beste ervaring op consoles moet je je systeem hacken - specifiek Aroma voor Wii U en Luma3DS voor 3DS. Op Wii U is de hackless SSSL-methode echter ook beschikbaar met beperkte functionaliteit. Zie onze installatie-instructies voor meer informatie." + }, + { + "answer": "We hebben geen toegang tot de bans van Nintendo Network, dus niet alle Nintendo Network-gebruikers worden verbannen. We hebben echter regels die we moeten volgen bij het gebruik van de service en het niet naleven van deze regels kan resulteren in een ban.", + "question": "Als ik verbannen word op Nintendo Network, blijf ik dan verbannen als ik Pretendo gebruik?" } ] }, "credits": { "title": "Het team", - "text": "Ontmoet het team achter het project" + "text": "Ontmoet het team achter het project", + "people": [ + { + "caption": "Eigenaar en hoofdontwikkelaar", + "name": "Jonathan Barrow (jonbarrow)" + }, + {}, + { + "caption": "Wii U onderzoek en patch ontwikkeling" + } + ] }, "specialThanks": { "title": "Speciale dank", @@ -107,7 +121,7 @@ }, "donation": { "progress": "$${totd} van $${goald}/maand, ${perc}% van de maandelijkse doelstelling.", - "upgradePush": "Om een abonnee te worden en toegang te krijgen tot coole voordelen, bezoek je de upgrade page." + "upgradePush": "Om een abonnee te worden en toegang te krijgen tot coole voordelen, bezoek je de upgradepagina." }, "upgrade": { "changeTierPrompt": "Weet u zeker dat u zich wilt afmelden bij oldtiername en wilt abonneren op newtiername?", @@ -185,7 +199,6 @@ "loginPrompt": "Heb je al een account?" }, "settings": { - "downloadFiles": "Download account bestanden", "upgrade": "Account upgraden", "settingCards": { "nickname": "Bijnaam", @@ -219,7 +232,6 @@ "no_newsletter_notice": "Nieuwsbrief is momenteel niet beschikbaar. Kom later weer terug", "no_edit_from_dashboard": "Het aanpassen van PNID instellingen via het gebruikers dashboard is momenteel niet mogelijk. Pas de gebruikers instellingen aan via je gelinkte game console" }, - "downloadFilesDescription": "(werkt niet op Nintendo Network)", "unavailable": "Niet beschikbaar" }, "accountLevel": [ diff --git a/locales/pl_PL.json b/locales/pl_PL.json index be9e6fd..1452474 100644 --- a/locales/pl_PL.json +++ b/locales/pl_PL.json @@ -1,6 +1,6 @@ { "nav": { - "about": "Informacje", + "about": "O Nas", "faq": "Często zadawane pytania", "docs": "Dokumentacja", "credits": "Podziękowania", @@ -63,7 +63,7 @@ }, { "question": "Czy Pretendo działa na Cemu/emulatorach?", - "answer": "Pretendo wspiera wszystko co interaktuje z Nintendo Network, Jedyny emulator który wspiera taką funkcjonalnośc jest Cemu. Cemu 2.0 oficjalnie wspiera Pretendo pod twoimi ustawieniami konta w emulatorze. Dla informacji jak zacząć z Cemu, zapoznaj się z documentation.
Citra nie wspiera prawdziwej gry online, więc dlatego nie działa z Pretendo, i w ogóle nie pokazuje żadnych znaków wspierania prawdziwej gry online. Mikage, emulator 3DS na telefonach może zacząć wspierać tą funkcjonalność w przyszłości, lecz jest to daleko od pewności." + "answer": "Pretendo wspiera wszystko co łączy się z Nintendo Network, Jedyny emulator który wspiera taką funkcjonalnośc jest Cemu. Cemu 2.0 oficjalnie wspiera Pretendo pod twoimi ustawieniami konta w emulatorze. Dla informacji jak zacząć z Cemu, zapoznaj się z dokumentacją.Citra nie wspiera prawdziwej gry online, więc dlatego nie działa z Pretendo, i w ogóle nie pokazuje żadnych znaków wspierania prawdziwej gry online. Mikage, emulator 3DS na telefonach może zacząć wspierać tą funkcjonalność w przyszłości, lecz jest to daleko od pewności." }, { "question": "Jeśli jestem zbanowany na Nintendo Network, czy będę również zbanowany na Pretendo?", @@ -141,7 +141,7 @@ }, "blogPage": { "title": "Blog", - "description": "", + "description": "Najnowsze aktualizacje w skondensowanych fragmentach. Jeśli chcesz otrzymywać częstsze aktualizacje, rozważ wsparcie nas.", "published": "Opublikowany przez", "publishedOn": "dnia" }, @@ -232,8 +232,6 @@ "newsletterPrompt": "Otrzymuj aktualizacje o projekcie przez email (możesz zrezygnować w dowolnym momencie)", "passwordPrompt": "Wprowadź swoje hasło Pretendo Network ID, aby pobrać pliki Cemu" }, - "downloadFiles": "Pobierz pliki konta", - "downloadFilesDescription": "(nie będzie działać z Nintendo Network)", "upgrade": "Ulepsz konto" }, "accountLevel": [ diff --git a/locales/pt_BR.json b/locales/pt_BR.json index 5c1e6e2..eb49dfe 100644 --- a/locales/pt_BR.json +++ b/locales/pt_BR.json @@ -62,7 +62,7 @@ "answer": "Não. Muitos dos recursos e serviços da Pretendo são desenvolvidos de forma independente (por exemplo, o Miiverse pode ser trabalhado por um desenvolvedor enquanto as contas e lista de amigos são trabalhados por outro) e, portanto, não podemos estimar quanto tempo isso pode levar." }, { - "question": "A Pretendo funciona em emuladores?", + "question": "Quando vocês irão adicionar mais jogos?", "answer": "Pretendo suporta qualquer cliente que possa interagir com a Nintendo Network. No momento, o único emulador para um desses consoles com suporte a Nintendo Network é o Cemu. O Cemu 2.0 oficialmente suporta a Pretendo nas configurações de conta do emulador. Para mais informações em como usar a Pretendo no Cemu, por favor visite a documentação.
Citra não suporta o modo online de verdade, e não funciona com a Pretendo, e também não demonstra nenhum sinal de suportar um modo online no futuro. Mikage, um outro emulador de 3DS para celulares, talvez haverá uma maneira de se conectar online no futuro." }, { @@ -141,7 +141,7 @@ }, "blogPage": { "title": "Blog", - "description": "", + "description": "As últimas atualizações em partes condensadas. Se você quiser ver atualizações mais frequentes, considere nos apoiar.", "published": "Publicado por", "publishedOn": "em" }, @@ -200,8 +200,6 @@ "no_edit_from_dashboard": "A edição das configurações de PNID do painel do usuário não está disponível no momento. Atualize as configurações do usuário do seu console de jogos vinculado", "signInSecurity": "Acesso e segurança" }, - "downloadFiles": "Baixar arquivos de conta", - "downloadFilesDescription": "(não funcionará na Nintendo Network)", "unavailable": "Indisponível", "upgrade": "Aprimorar conta" }, diff --git a/locales/pt_PT.json b/locales/pt_PT.json index afc7006..a46bf3c 100644 --- a/locales/pt_PT.json +++ b/locales/pt_PT.json @@ -3,7 +3,7 @@ "faq": "Perguntas Frequentes", "accountWidget": { "logout": "Sair", - "settings": "Configurações" + "settings": "Definições" }, "donate": "Doar", "about": "Sobre", @@ -48,7 +48,6 @@ }, "settings": { "upgrade": "Aprimorar conta", - "downloadFiles": "Descarregarr ficheiros de conta", "settingCards": { "gender": "Gênero", "newsletterPrompt": "Receba atualizações do projeto via e-mail (pode desinscrever-se a qualquer momento)", @@ -81,7 +80,6 @@ "no_newsletter_notice": "Notícias não estão disponíveis no momento. Volte novamente depois", "no_edit_from_dashboard": "A edição das configurações de PNID do painel do utilizador não está disponível no momento. Atualize as configurações do utilizador do seu console de jogos vinculado" }, - "downloadFilesDescription": "(não funcionará na Nintendo Network)", "unavailable": "Indisponível" }, "banned": "Banido", @@ -146,7 +144,7 @@ "hero": { "subtitle": "Servidores de jogos", "title": "Recriados", - "text": "O Pretendo é uma reposição gratuíta e de código aberto para os servidores do Wii U e Nintendo 3DS, permitindo a conectividade online para todos, mesmo após o encerramento dos servidores originais", + "text": "A Pretendo é uma substituição gratuita e de código aberto para os servidores da Nintendo 3DS e da Wii U, permitindo uma conexão online para todos, mesmo depois dos servidores originais serem descontinuados.", "buttons": { "readMore": "Saiba mais" } @@ -154,8 +152,8 @@ "aboutUs": { "title": "Sobre nós", "paragraphs": [ - "Utilizando o design de sala limpa, Pretendo é um projeto de código aberto que visa recriar a Nintendo Network para o Wii U e para família de consoles Nintendo 3DS.", - "Como os nossos serviços serão gratuitos e de código aberto, eles podem continuar existindo por muito mais tempo após o inevitável encerramento da Nintendo Network." + "A Pretendo é um projeto open-source que pretende recriar a Nintendo Network para a 3DS e a Wii U, ao utilizar engenharia reversa \"clean-room\".", + "Sendo que os nossos serviços são grátis e de código-aberto, eles podem assim existir após o inevitável encerramento da Nintendo Network." ] }, "progress": { @@ -166,7 +164,7 @@ "QAs": [ { "question": "O que é Pretendo?", - "answer": "Pretendo é uma reposição de código aberto para a Nintendo Network que visa fornecer servidores personalizados para o Wii U e para a família de consoles Nintendo 3DS. Nosso objetivo é preservar as funcionalidades online desses consoles para permitir que os jogadores continuem experienciando os jogos favoritos na capacidade máxima deles." + "answer": "A Pretendo é uma substituição de código aberto à Nintendo Network que pretende criar servidores para a Wii U e a família de consolas 3DS. O nosso objetivo é preservar as capacidades online destas consolas, permitindo que os jogadores possam continuar a jogar os seus jogos favoritos da Wii U e da 3DS da melhor maneira possível." }, { "question": "Os meus NNIDs existentes funcionarão na Pretendo?", @@ -174,7 +172,7 @@ }, { "question": "Como uso a Pretendo?", - "answer": "Pretendo atualmente não está disponível para uso pelo público geral. No entanto, quando estiver pronto, poderá usar a Pretendo executando nosso patcher homebrew no seu console." + "answer": "A Pretendo não está atualmente num estado pronto para o uso público. No entanto, quando estiver, poderás usar a Pretendo apenas ao abrir o nosso patcher na tua consola." }, { "question": "Sabe quando recurso/serviço estará pronto?", diff --git a/locales/ro_RO.json b/locales/ro_RO.json index cfe1ed8..15d76a7 100644 --- a/locales/ro_RO.json +++ b/locales/ro_RO.json @@ -206,8 +206,6 @@ "no_newsletter_notice": "Buletin indisponibil. Reveniți mai târziu", "newsletter": "Buletin informativ" }, - "downloadFiles": "Descarcă fișierele contului", - "downloadFilesDescription": "(nu va funcționa pe Nintendo Network)", "unavailable": "Indisponibil" }, "accountLevel": [ diff --git a/locales/ru_RU.json b/locales/ru_RU.json index ba4d018..6956b91 100644 --- a/locales/ru_RU.json +++ b/locales/ru_RU.json @@ -3,7 +3,7 @@ "about": "О нас", "faq": "ЧаВо", "docs": "Документы", - "credits": "Титры", + "credits": "О разработчиках", "progress": "Прогресс", "donate": "Пожертвование", "blog": "Блог", @@ -55,37 +55,141 @@ }, { "question": "Как мне подключиться к Pretendo?", - "answer": "На данный момент Pretendo ещё не готово для нормального использования. Однако, когда мы закончим разработку базовых функций, вы сможете подключиться к Pretendo просто запуская наше homebrew-приложение на вашей консоли." + "answer": "Чтобы начать использовать Pretendo Network на 3DS, Wii U или эмуляторах, просмотрите наши инструкции по установке!" }, { "question": "Знаете ли вы, когда что-либо из функций и сервисов будет сделано?", "answer": "Нет. Большинство сервисов Pretendo разрабатываются разными разработчиками (Например, над Miiverse может работать один из разработчиков, а над профилями и друзьями может работать совсем другой разработчик) и в целом мы не можем сказать сколько времени займёт разработка, так как сами этого не знаем." }, { - "question": "Работает ли Pretendo на эмуляторах/Cemu?", - "answer": "Pretendo сделано специально для оборудования Wii U и 3DS; на данный момент единственный эмулятор с поддержкой Nintendo Network является Cemu. Cemu официально не поддерживает неофициальные сервера, однако Pretendo может работать и на Cemu.Pretendo на данный момент не поддерживает Cemu." + "question": "Когда Вы добавите больше игр?", + "answer": "Мы работаем над новыми играми тогда, когда мы чувствуем, что наши серверные библиотеки достаточно готовы для реализации нужной поддержки, а также при наличии достаточного времени у разработчиков. Большая часть нашей работы приходится на стабилизацию и доработку уже имеющихся у нас игр: мы хотим добиться от них наилучшего результата, прежде чем переходить к следующим. Поскольку новые задачи появляются постоянно, мы не можем спрогнозировать, когда то или это будет сделано." }, { - "question": "Если я забанен в Nintendo Network, буду ли я забанен в Pretendo?", - "answer": "Нет. Все пользователи, которые имеют бан в официальном Nintendo Network, смогут пользоваться Pretendo. Однако, у нас есть правила использования и при их нарушении вы можете получить бан." + "question": "Если у меня эмулятор, хватит ли этого, чтобы использовать Pretendo?", + "answer": "Нет. В целях безопасности и модерации, если вы используете эмулятор, вам всё равно нужна настоящая консоль. Это позволит улучшить безопасность и усилить эффективность применения правил в целях обеспечения безопасной и приятной атмосферы на наших сервисах." }, { - "question": "Будет ли Pretendo поддерживать Wii/Switch?", + "question": "Работает ли Pretendo на Cemu/эмуляторах?", + "answer": "Cemu 2.1 официально поддерживает Pretendo через настройки вашего сетевого профиля на эмуляторе. Чтобы получить информацию о том, как настроить Cemu, проверьте нашу документацию.
Некоторые 3DS-эмуляторы или различные их ответвления могут поддерживать нас, однако у нас пока что нет никаких официальных рекомендаций или инструкций по настройке. Последние версии Citra не поддерживают Pretendo." + }, + { + "question": "Будет ли Pretendo поддерживать WIi/Switch?", "answer": "У Wii уже есть неофициальные сервера, под названием Wiimmfi. На данный момент мы не собираемся работать с онлайном Switch, так как сервис платный и кардинально отличается от Nintendo Network." }, { "question": "Нужно ли мне прошивать консоль?", - "answer": "Да, вам понадобится прошить консоль, чтобы подключиться. Однако, на Wii U вам понадобится только доступ к Homebrew Launcher (т.е. Haxchi, Coldboot Haxchi, или web browser exploit). Информация о подключении с 3DS будет опубликована позже." + "answer": "Для наилучшего опыта на консолях вам потребуется взломать систему — а именно установить Aroma для Wii U и Luma3DS для 3DS. Однако на Wii U также доступен безвзломный метод SSSL с ограниченной функциональностью. Подробности смотрите в наших инструкциях по установке." + }, + { + "question": "Если я забанен на Nintendo Network, буду ли я забанен и на Pretendo тоже?", + "answer": "Нет. Все пользователи, которые имеют бан в официальном Nintendo Network, смогут пользоваться Pretendo. Однако, у нас есть свои правила использования, и при их нарушении вы можете получить бан уже на Pretendo." + }, + { + "question": "Можно ли использовать читы или моды в сетевых играх на Pretendo?", + "answer": "Только в частных матчах — получение нечестного преимущества или нарушение игрового процесса с участниками, которые не давали на это согласия (как в публичных матчах), является причиной для блокировки. Мы регулярно применяем баны аккаунтов и консолей как на Wii U, так и на 3DS. В Pretendo используются дополнительные меры безопасности, из-за которых традиционные методы обхода блокировок, такие как смена серийного номера, не работают." } ] }, "credits": { "title": "Наша команда", - "text": "Ознакомьтесь с командой, которая работает над разработкой Pretendo" + "text": "Ознакомьтесь с командой, которая работает над разработкой Pretendo", + "people": [ + { + "caption": "Руководитель проекта и гл. разработчик", + "name": "Джонатан Барроу (jonbarrow)", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow" + }, + { + "name": "Джемма (CaramelKat)", + "caption": "Исследование и разработка Miiverse", + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat" + }, + { + "caption": "Исследование Wii U и разработка патчей", + "github": "https://github.com/ashquarky", + "picture": "https://github.com/ashquarky.png", + "name": "quarky" + }, + { + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom", + "caption": "Серверная архитектура и исследование систем", + "name": "SuperMarioDaBom" + }, + { + "caption": "Веб-разработка", + "picture": "https://github.com/gitlimes.png", + "github": "https://github.com/gitlimes", + "name": "pinklimes" + }, + { + "caption": "Исследование систем и разработка серверов", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "name": "Shutterbug2000", + "github": "https://github.com/shutterbug2000" + }, + { + "picture": "https://github.com/InternalLoss.png", + "github": "https://github.com/InternalLoss", + "name": "Billy", + "caption": "Серверная архитектура и архивариус" + }, + { + "name": "DaniElectra", + "caption": "Исследование систем и разработка серверов", + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra" + }, + { + "name": "niko", + "caption": "Веб и серверная разработка", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "name": "MatthewL246", + "caption": "DevOps и работа с сообществом", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "name": "wolfendale", + "caption": "Разработка и оптимизация серверов", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "Исследования и разработка патчей для 3DS", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" + } + ] }, "specialThanks": { "title": "Особая благодарность", - "text": "Без них, Pretendo не был бы таким какой он есть сегодня." + "text": "Без них, Pretendo не был бы таким какой он есть сегодня.", + "people": [ + { + "name": "Участники на GitHub", + "caption": "Переводы и другая помощь", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "name": "superwhiskers", + "caption": "Разработка библиотеки Crunch", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers" + }, + { + "caption": "Разработка 3DS и NEX-диссектора", + "name": "Stary" + } + ] }, "discordJoin": { "title": "Будьте в курсе всех новостей", @@ -111,7 +215,7 @@ "Webkit v537 - лучшая версия Webkit для Wii U. Нет, мы не будет портировать Chrome на Wii U.", "Не могу дождаться пока на часах не будет 03:14:08 UTC , 19 января 2038 года!", "Wii U на самом деле - недооценённая система: рекламы были ужасными, но сама консоль - замечательная. Эм? Подождите секунду... Я не уверен почему мой геймпад не подключается к моей Wii.", - "Главная музыкальная тема Super Mario World 2 - Yoshi's Island , просто бомба! Ты не можешь доказать мне обратное.", + "Главная музыкальная тема Super Mario World 2 - Yoshi's Island , просто бомба! Смирись.", "Мои любимые релизы на Nintendo Switch были - Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Еще Один Порт Игр Pack, and Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Вам Действительно Понравился Nintendo Wii U Virtual Console Игры, Так Что Мы Их возвращаем\" Pack. Ты с уверенностью можешь сказать что Nintendo точно заботится о нас.", "Например, \"Знаешь, Эш, благослови её сердце, она весь день занимается UwU\" - это южный приятный способ сказать \"Эш занимается UwU всё время, и это очень странно и глупо, и я бы хотел, чтобы они этого не делали\"", "Мой первый видеоролик на моём канале! Я хотел сделать видео уже очень давно, но мой ноутбук работал очень плохо и я не мог открыть фрапс , скайп и майнкрафт одновременно. Но теперь этому конец! Благодаря моему учителю по информатике мой ноутбук стал быстрым и теперь я могу снимать ролики! Я надеюсь вам понравится ставьте лайк и подписывайтесь на канал!" @@ -149,7 +253,6 @@ "forgotPassword": "Забыли пароль?" }, "settings": { - "downloadFilesDescription": "(не будут работать в Nintendo Network)", "settingCards": { "profile": "Профиль", "timezone": "Часовой пояс", @@ -182,7 +285,6 @@ "no_edit_from_dashboard": "Изменение настроек PNID на данный момент невозможна. Пожалуйста, обновите данные о пользователе с привязанной игровой консоли", "newsletter": "Газета" }, - "downloadFiles": "Скачать данные учётной записи", "unavailable": "Недоступно", "upgrade": "Улучшить учётную запись" }, @@ -225,7 +327,7 @@ ] }, "search": { - "caption": "Введите его в графу чтобы получить больше информации об ошибке!", + "caption": "Введите код ошибки здесь, чтобы получить больше информации об ошибке!", "label": "Код ошибки", "no_match": "Ничего не найдено", "title": "Получили код ошибки?" diff --git a/locales/sk_SK.json b/locales/sk_SK.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/sk_SK.json @@ -0,0 +1 @@ +{} diff --git a/locales/sv_SE.json b/locales/sv_SE.json index 89470c3..bce0a4c 100644 --- a/locales/sv_SE.json +++ b/locales/sv_SE.json @@ -70,9 +70,7 @@ "loginPrompt": "Har redan ett konto?" }, "settings": { - "downloadFiles": "Ladda ner kontofiler", "upgrade": "Uppgradera konto", - "downloadFilesDescription": "(kommer inte att funka på Nintendo Nätverket)", "settingCards": { "userSettings": "Användarinställningar", "profile": "Profil", diff --git a/locales/ta_IN.json b/locales/ta_IN.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locales/ta_IN.json @@ -0,0 +1 @@ +{} diff --git a/locales/tr_TR.json b/locales/tr_TR.json index b26e6ae..e63ab9b 100644 --- a/locales/tr_TR.json +++ b/locales/tr_TR.json @@ -34,7 +34,7 @@ "title": "Hakkımızda", "paragraphs": [ "Pretendo, tersine mühendislik kullanarak 3DS ve Wii U için Nintendo Network'ü yeniden oluşturmayı amaçlayan açık kaynaklı bir projedir.", - "Hizmetlerimiz hem ücretsiz hem de açık kaynak olacağından, Nintendo Network'ün kaçınılmaz olarak kapanışından çok daha sonra var olabilirler." + "Hizmetlerimiz ücretsiz ve açık kaynak kodlu olduğu için yıllarca varlığını sürdürecektir." ] }, "progress": { @@ -54,27 +54,39 @@ }, { "question": "Pretendo'yu nasıl kullanırım?", - "answer": "Pretendo şuanda genel kullanım için hazır değil. Fakat hazır olduğunda Pretendo'yu konsolunuzda bir homebrew yamalayıcısı çalıştırarak kullanabileceksiniz." + "answer": "Pretendo Network'ü 3DS, Wii U veya emülatörlerde kullanmaya başlamak için lütfen kurulum talimatlarımıza bakın!" }, { "question": "Servis ya da bir özelliğin ne zaman hazır olacağını biliyor musunuz?", "answer": "Hayır. Pretendo'nun birçok özelliği/hizmeti bağımsız olarak geliştirilmektedir (örneğin, Hesaplar ve Arkadaşlar üzerinde başka bir geliştirici çalışırken Miiverse üzerinde başka bir geliştirici çalışır.) ve bu nedenle, bunun ne kadar süreceği konusunda genel bir tahmini süre veremiyoruz." }, { - "question": "Pretendo Cemu/emülatörlerde çalışır mı?", - "answer": "Pretendo, Nintendo Network ile etkileşebilen herhangi bir istemciyi destekler. Şu anda bu tür işlevselliğe sahip tek emülatör Cemu'dur. Cemu 2.0, emülator ağ hesabı seçenekleri altında Pretendo'yu resmi olarak destekler. Cemu ile nasıl başlayacağınızla ilgili bilgi için dökümanlara bakın.
Citra gerçek çevrimiçi oyun oynamayı desteklemiyor ve bu nedenle Pretendo ile çalışmaz ve destekleyeceğine dair hiçbir işarette göstermiyor. Mobil cihazlar için bir 3DS emülatörü olan Mikage, kesin olmamakla birlikte gelecekte destek sağlayabilir." + "question": "Daha fazla oyunu ne zaman ekleyeceksiniz?", + "answer": "Backend kütüphanelerimizin desteklemeye hazır olduğunu hissettiğimizde ve geliştiricilerin bunu sürdürmek için zamanı olduğunda yeni oyunlar üzerinde çalışıyoruz. Çalışmalarımızın çoğu mevcut oyunlarımızı stabilize etmeye ve tamamlamaya yöneliktir - yeni oyunlara geçmeden önce bu oyunlarda mümkün olan en iyi deneyimi elde etmek istiyoruz. Her zaman yeni işler ortaya çıktığı için bunun ne zaman olacağına dair bir tahminde bulunamıyoruz." }, { - "question": "Nintendo Network'te yasaklandıysam, Pretendo kullanırken yasaklı kalacak mıyım?", - "answer": "Nintendo Network'ün yasaklarına erişimimiz yok ve tüm kullanıcılar hizmetimizde yasaklı olmayacak. Ancak, hizmeti kullanırken uymanız gereken kurallarımız olacaktır ve bu kurallara uyulmaması yasaklama ile sonuçlanabilir." + "question": "Eğer herhangi bir emülatör kullanırsam, bu Pretendo servislerini kullanmak için yeterli olacak mı?", + "answer": "Hayır. Güvenlik ve denetim amacıyla, bir emülatör kullanıyorsanız, yine de gerçek bir konsola ihtiyacınız vardır. Bu, hizmetimizle güvenli ve keyifli bir deneyim sağlamak için gelişmiş güvenlik ve kuralların daha etkili bir şekilde uygulanmasına olanak tanır." }, { - "question": "Pretendo Wii/Switch'i destekleyecek mi?", - "answer": "Wii'nin zaten Wiimmfi tarafından sağlanan özel sunucuları var. Şu anda Switch'i hem ücretli hem de Nintendo Network'ten tamamen farklı olduğu için hedeflemek istemiyoruz." + "question": "Pretendo servisleri Cemu yada benzeri emülatörlerde çalışıyor mu?", + "answer": "Cemu 2.1 sürümünde, emülatördeki ağ hesabı seçenekleriniz altında Pretendo'yu resmi olarak desteklemektedir. Cemu'ya nasıl başlayacağınız hakkında bilgi içindocumentation.
, Bazı 3DS emülatörleri veya forkları bizi destekleyebilir, ancak şu anda herhangi bir resmi öneri veya kurulum talimatımız yok. Citra'nın son sürümleri Pretendo'yu desteklememektedir." }, { - "question": "Bağlanmak için hacklere ihtiyacım olacak mı?", - "answer": "Evet, bağlanmak için cihazınızı hacklemeniz gerekecek; ancak Wii U'da yalnızca Homebrew Launcher'a (yani Haxchi, Coldboot Haxchi ve hatta web tarayıcısı açıklarından yararlanma) erişmeniz gerekir ve 3DS'nin nasıl bağlanacağı hakkında daha sonra bilgi verilecektir." + "question": "Pretendo Wii/Switch'i de destekleyecek mi?", + "answer": "Wii'de zaten Wiimmfi tarafından sağlanan özel sunuculara ve lobilere sahiptir. Hem ücretli hem de Nintendo Network'ten tamamen farklı olduğu için şu anda Switch'i hedeflemek istemiyoruz." + }, + { + "question": "Pretendo servislerine bağlanmak için hacklere ihtiyacım olacak mı?", + "answer": "Konsollarda en iyi deneyimi elde etmek için konsolunuzu hacklemeniz gerekecek; özellikle Wii U için Aroma ve 3DS için Luma3DS. Ancak Wii U'da hackless SSSL yöntemi de sınırlı işlevsellikle mevcuttur. Ayrıntılı bilgi için setup instructions bakınız." + }, + { + "question": "Nintendo Network'te banlıysam, Pretendo'da banlı olucakmıyım?", + "answer": "Nintendo Network'ün ban listesine erişimimiz yok, bu nedenle tüm Nintendo Network kullanıcıları banlanmadı. Ancak, hizmeti kullanırken uymamız gereken kurallar vardır ve bu kurallara uyulmaması yasaklanmaya neden olabilir." + }, + { + "question": "Pretendo ile online oyunlarda hileler veya modlar kullanabilir miyim?", + "answer": "Sadece private maçlarda - haksız avantaj elde etmek veya rızası olmayan kişilerle çevrimiçi deneyimi bozmak (herkese açık maçlarda olduğu gibi) banlanmanız olasıdır. Hem Wii U hem de 3DS sistemlerine düzenli olarak hesap ve konsol banı uyguluyoruz. Pretendo, seri numaranızı değiştirmek gibi geleneksel 'ban kaldırma' yöntemlerini etkisiz hale getiren ekstra güvenlik sistemimiz bile vardır." } ], "text": "Burada, bize kolay bilgi için sorulan bazı genel sorular yer almaktadır." @@ -99,7 +111,81 @@ }, "credits": { "title": "Takımımız", - "text": "Projenin arkasındaki ekip ile tanışın" + "text": "Projenin arkasındaki ekip ile tanışın", + "people": [ + { + "name": "Jonathan Barrow (jonbarrow)", + "caption": "Proje lideri ve baş geliştirici", + "picture": "https://github.com/jonbarrow.png", + "github": "https://github.com/jonbarrow" + }, + { + "picture": "https://github.com/caramelkat.png", + "name": "Jemma (CaramelKat)", + "caption": "Miiverse için araştırma ve geliştirme", + "github": "https://github.com/CaramelKat" + }, + { + "caption": "Wii U için araştırma ve yama geliştirme", + "name": "quarky", + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky" + }, + { + "github": "https://github.com/SuperMarioDaBom", + "name": "SuperMarioDaBom", + "picture": "https://github.com/supermariodabom.png", + "caption": "Sistem araştırmaları ve sunucu mimarisi" + }, + { + "picture": "https://github.com/gitlimes.png", + "caption": "Web geliştirme", + "github": "https://github.com/gitlimes", + "name": "pinklimes" + }, + { + "caption": "Sistem araştırması ve sunucu geliştirme", + "name": "Shutterbug2000", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000" + }, + { + "github": "https://github.com/InternalLoss", + "name": "Billy", + "picture": "https://github.com/InternalLoss.png", + "caption": "Koruma uzmanı ve sunucu mimarisi" + }, + { + "name": "DaniElectra", + "caption": "Sistem araştırmaları ve sunucu geliştirme", + "github": "https://github.com/DaniElectra", + "picture": "https://github.com/danielectra.png" + }, + { + "name": "niko", + "caption": "Web ve sunucu geliştirme", + "picture": "https://github.com/hauntii.png", + "github": "https://github.com/hauntii" + }, + { + "picture": "https://github.com/MatthewL246.png", + "name": "MatthewL246", + "caption": "DevOps ve topluluk çalışması", + "github": "https://github.com/MatthewL246" + }, + { + "name": "wolfendale", + "caption": "Sunucu geliştirme ve optimizasyon", + "picture": "https://github.com/wolfendale.png", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "3DS yaması geliştirme ve araştırma", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" + } + ] }, "account": { "settings": { @@ -135,10 +221,8 @@ "connectedToDiscord": "Discord'a bu hesap ile bağlanıldı", "discord": "Discord" }, - "downloadFiles": "Hesap dosyalarını indir", "upgrade": "Hesabı yükselt", - "unavailable": "Mevcut değil", - "downloadFilesDescription": "(Nintendo Network'te çalışmayacak)" + "unavailable": "Mevcut değil" }, "loginForm": { "forgotPassword": "Şifreni mi unuttun?", @@ -185,7 +269,8 @@ "Super Mario World 2 - Yoshi's Island'ın ana teması tam bir klasik ve beni başka türlü ikna etmenin bir yolu yok.", "En sevdiğim Nintendo Switch oyunları Nintendo Switch Online + Genişletme Paketi, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Çevrimdışı Oynama Paketi, Nintendo Switch Online + Bir Port daha Paketi ve Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Nintendo Wii U Sanal Konsol Oyunlarını Gerçekten Sevdiniz, Bu yüzden Geri Getiriyoruz\" Paketi. Nintendo'nun umursadığını gerçekten söyleyebilirsin.", "\"Ash'i biliyorsun, kalbini korusun, o bütün gün UwUlar\" gibi, \"Ash her zaman uwular ve bu gerçekten garip ve aptalca ve keşke yapmasalar\" demenin güneydeki güzel yolu", - "Kanalımdaki ilk videom!! bn uzun zamandır video yapmak istiyordum ama dizüstü bilgisayarım oldukça kötü çalıştı ve fraps, skype ve minecraft'ı aynı anda çalıştıramadım. ama artık bitti! BT öğretmenimin biraz yardımıyla dizüstü bilgisayarım çok daha iyi çalışıyor ve şimdi kayıt yapabiliyorum! umarım eğlenirsiniz ve beğendiyseniz lütfen beğenip abone olun!!!" + "Kanalımdaki ilk videom!! bn uzun zamandır video yapmak istiyordum ama dizüstü bilgisayarım oldukça kötü çalıştı ve fraps, skype ve minecraft'ı aynı anda çalıştıramadım. ama artık bitti! BT öğretmenimin biraz yardımıyla dizüstü bilgisayarım çok daha iyi çalışıyor ve şimdi kayıt yapabiliyorum! umarım eğlenirsiniz ve beğendiyseniz lütfen beğenip abone olun!!!", + "Bana Güzel Görünüyor" ], "widget": { "button": "Şimdi katıl!", @@ -245,7 +330,94 @@ }, "specialThanks": { "text": "Onlar olmasaydı, Pretendo bugün olduğu yerde olamazdı.", - "title": "Ayrıca teşekkürler" + "title": "Ayrıca teşekkürler", + "people": [ + { + "caption": "Yerelleştirme ve diğer katkılar", + "name": "GitHub katılımcıları", + "github": "https://github.com/PretendoNetwork", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" + }, + { + "caption": "crunch kütüphanesi̇ geli̇şti̇rme", + "name": "superwhiskers", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers" + }, + { + "github": "https://github.com/Stary2001", + "picture": "https://github.com/Stary2001.png", + "caption": "3DS geliştirme ve NEX dissektörü", + "name": "Stary" + }, + { + "caption": "Miiverse bilgi paylaşımı", + "github": "https://twitter.com/rverseClub", + "picture": "https://github.com/rverseTeam.png", + "name": "rverse" + }, + { + "github": "https://github.com/Kinnay", + "special": "Özel teşekkürler", + "name": "Kinnay", + "caption": "Nintendo veri yapıları üzerine araştırmalar", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128" + }, + { + "picture": "https://github.com/ninstar.png", + "caption": "Mii Editor ve Juxt reactions için ikonlar", + "name": "NinStar", + "github": "https://github.com/ninstar" + }, + { + "picture": "https://github.com/EpicUsername12.png", + "name": "Rambo6Glaz", + "caption": "Konsol araştırmaları ve oyun sunucuları", + "github": "https://github.com/EpicUsername12" + }, + { + "name": "GaryOderNichts", + "caption": "Wii U yaması geliştirme", + "picture": "https://github.com/GaryOderNichts.png", + "github": "https://github.com/GaryOderNichts" + }, + { + "name": "zaksabeast", + "caption": "3DS yama yaratıcısı", + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "github": "https://github.com/zaksabeast" + }, + { + "caption": "Sunucu mimarisi", + "name": "mrjvs", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "name": "binaryoverload", + "picture": "https://github.com/binaryoverload.png", + "github": "https://github.com/binaryoverload", + "caption": "Sunucu mimarisi" + }, + { + "caption": "Splatoon rotasyonları ve araştırması", + "name": "Simonx22", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "github": "https://github.com/OatmealDome", + "caption": "Splatoon rotasyonları ve araştırması", + "name": "OatmealDome", + "picture": "https://github.com/OatmealDome.png" + }, + { + "name": "GitHub katılımcıları", + "caption": "Yerelleştirme ve diğer katkılar", + "github": "https://github.com/PretendoNetwork", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" + } + ] }, "donation": { "upgradePush": "Abone olmak ve harika avantajlara erişmek için yükseltme sayfasını ziyaret edin.", @@ -254,7 +426,7 @@ "blogPage": { "published": "Tarafından yayınlandı", "title": "Blog", - "description": "", + "description": "Yoğunlaştırılmış parçalar halinde en son güncellemeler. Güncellemeleri daha sık görmek istiyorsanız supporting us.", "publishedOn": "şu tarihte" }, "upgrade": { @@ -263,7 +435,7 @@ "month": "ay", "description": "Aylık hedefe ulaşmak, Pretendo'yu tam zamanlı bir iş haline getirecek ve daha hızlı bir oranda daha kaliteli güncellemeler sağlayacaktır.", "title": "Yükselt", - "unsubPrompt": "tiername aboneliğinden çıkmak istediğinizden emin misiniz? Bu seviye ile ilişkili ayrıcalıklara erişiminizi kaybedeceksiniz.", + "unsubPrompt": "tiername Aboneliğinizi iptal etmek istediğinizden emin misiniz? Bu katmandaki avantajları immediately erişiminizi kaybedeceksiniz.", "unsub": "Abonelikten çık", "unsubConfirm": "Abonelikten çık", "changeTier": "Seviye değiştir", @@ -278,5 +450,8 @@ "close": "Kapat", "confirm": "Onayla", "cancel": "İptal" + }, + "notfound": { + "description": "Woops! Bu sayfayı bulamadık." } } diff --git a/locales/uk_UA.json b/locales/uk_UA.json index d1cd27d..8ac6773 100644 --- a/locales/uk_UA.json +++ b/locales/uk_UA.json @@ -2,7 +2,7 @@ "aboutUs": { "paragraphs": [ "Pretendo — це проект із відкритим вихідним кодом, метою якого є відтворення мережі Nintendo для 3DS і Wii U за допомогою зворотного проектування чистих приміщень.", - "Оскільки наші служби будуть безкоштовними та відкритими, вони можуть існувати ще довго після неминучого закриття Nintendo Network." + "Оскільки наші служби є безкоштовними та відкритими, вони будуть існувати ще довгий час" ], "title": "Про нас" }, @@ -17,32 +17,44 @@ "question": "Чи працюватимуть мої наявні NNID на Pretendo?" }, { - "question": "Як використовувати Pretendo?", - "answer": "Pretendo наразі не готовий для загального використання. Однак, як тільки це станеться, ви зможете використовувати Pretendo, просто запустивши наш homebrew patcher на вашій консолі." + "question": "Як користуватися Pretendo?", + "answer": "Щоб почати використовувати Pretendo Network на 3DS, Wii U чи емуляторах, відвідайте інструкції для підключення!" }, { "answer": "Ні. Багато функцій/сервісів Pretendo розроблено незалежно (наприклад, над Miiverse може працювати один розробник, а над обліковими записами та друзями — інший), тому ми не можемо вказати скільки часу це займе.", "question": "Ви знаєте, коли функція/служба буде готова?" }, { - "answer": "Pretendo підтримує будь-який емулятор, який може взаємодіяти з Nintendo Network. Наразі єдиним емулятором із такою функціональністю є Cemu. Cemu 2.0 офіційно підтримує Pretendo в параметрах вашого мережевого облікового запису в емуляторі. Щоб отримати інформацію про те, як розпочати роботу з Cemu, перегляньте документацію.
Citra не підтримує звичайну онлайн-гру та тому не працює з Pretendo і взагалі не підтримує звичайну онлайн-гру. Mikage, емулятор 3DS для мобільних пристроїв, мабуть ми зробимо підтримку в майбутньому, але це не точно.", - "question": "Чи працює Pretendo на Cemu/емуляторах?" + "answer": "Pretendo підтримує будь-який емулятор, який може взаємодіяти з Nintendo Network. Наразі єдиним емулятором із такою функціональністю є Cemu. Cemu 2.0 офіційно підтримує Pretendo в параметрах вашого мережевого облікового запису в емуляторі. Щоб отримати інформацію про те, як розпочати роботу з Cemu, перегляньте документацію.Citra не підтримує звичайну онлайн-гру та тому не працює з Pretendo і взагалі не підтримує звичайну онлайн-гру. Mikage, емулятор 3DS для мобільних пристроїв, можливо, надасть підтримку в майбутньому, хоча це ще не факт.", + "question": "Коли ви додасте більше ігор?" }, { - "answer": "Ми не маємо доступу до блокувань Nintendo Network, і всі користувачі не будуть заблоковані в нашому сервісі. Однак у нас будуть правила, яких слід дотримуватися під час користування сервісом, і недотримання цих правил може призвести до блокування.", - "question": "Якщо мене забанять у Nintendo Network, чи залишиться бан під час використання Pretendo?" + "answer": "Ні. З метою безпеки та модерації, якщо ви використовуєте емулятор, вам все одно потрібна справжня консоль. Це дозволяє підвищити рівень безпеки та ефективніше застосовувати правила, щоб забезпечити безпечне та приємне користування нашим сервісом.", + "question": "Якщо я буду використовувати емулятор, чи буде цього достатньо для використання Pretendo?" }, { - "question": "Чи підтримуватиме Pretendo Wii/Switch?", - "answer": "Wii уже має спеціальні сервери, надані Wiimmfi. Наразі ми не хочемо орієнтуватися на Switch, оскільки він платний і повністю відрізняється від Nintendo Network." + "question": "Чи працює Pretendo на Cemu/емуляторах?", + "answer": "Cemu 2.1 офіційно підтримує Pretendo у параметрах вашого мережевого облікового запису в емуляторі. Щоб дізнатися, як розпочати роботу з Cemu, зверніться до документації.
. Деякі емулятори або форки емулятора 3DS можуть підтримувати нас, але наразі ми не маємо жодних офіційних рекомендацій чи інструкцій з налаштування. Фінальні збірки Citra не підтримують Pretendo." }, { - "question": "Чи знадобляться мені хаки для підключення?", - "answer": "Так, вам потрібно буде хакнути пристрій, щоб підключитися; однак на Wii U вам потрібен буде лише доступ до Homebrew Launcher (тобто Haxchi, Coldboot Haxchi або навіть експлойт веб-браузера), а інформація про те, як 3DS підключатиметься, буде надана пізніше." + "question": "Чи буде Pretendo підтримувати Wii/Switch?", + "answer": "Для Wii вже є власні сервери, надані Wiimmfi. Наразі ми не хочемо орієнтуватися на Switch, оскільки вона є платною і повністю відрізняється від Nintendo Network." + }, + { + "answer": "Для найкращого досвіду на консолях вам потрібно буде хакнути вашу систему - зокрема, Aroma для Wii U та Luma3DS для 3DS. Однак на Wii U також доступний метод SSSL без злому з обмеженою функціональністю. Дивіться наші інструкції з налаштування для отримання детальної інформації.", + "question": "Чи потрібні хаки для підключення?" + }, + { + "question": "Якщо мене заблоковано в Nintendo Network, чи буду я заблокований під час використання Pretendo?", + "answer": "Ми не маємо доступу до блокувань Nintendo Network, тому всі користувачі Nintendo Network не заблоковані. Однак у нас є правила, яких слід дотримуватися при використанні сервісу, і їх недотримання може призвести до блокування." + }, + { + "answer": "Тільки в приватних матчах - отримання несправедливої переваги або порушення взаємодії з людьми, які не давали на це згоди (як і в публічних матчах), є забороненим порушенням. Ми регулярно застосовуємо блокування акаунтів і консолей як для Wii U, так і для 3DS. Pretendo використовує додаткові заходи безпеки, які роблять традиційні методи зняття блокування, такі як зміна серійного номера, неефективними.", + "question": "Чи можу я використовувати чити або модифікації з Pretendo?" } ], "title": "Часті Запитання", - "text": "Ось кілька поширених запитань, які нам задають, щоб отримати легку інформацію." + "text": "Ось кілька поширених запитань, які нам задають, щоб отримати інформацію." }, "showcase": { "cards": [ @@ -52,7 +64,7 @@ }, { "title": "Juxtaposition", - "caption": "Повторне уявлення про Miiverse, ніби це було зроблено в сучасну епоху." + "caption": "Переосмислення Miiverse, так, ніби воно було зроблено в сучасну епоху." }, { "caption": "Грайте в улюблені ігри Wii U навіть без консолі!", @@ -64,12 +76,86 @@ }, "credits": { "title": "Команда", - "text": "Познайомтеся з командою проекту" + "text": "Познайомтеся з командою проекту", + "people": [ + { + "picture": "https://github.com/jonbarrow.png", + "name": "Jonathan Barrow (jonbarrow)", + "github": "https://github.com/jonbarrow", + "caption": "Власник проєкту та головний розробник" + }, + { + "name": "Jemma (CaramelKat)", + "picture": "https://github.com/caramelkat.png", + "github": "https://github.com/CaramelKat", + "caption": "Дослідження та розробка Miiverse" + }, + { + "caption": "Дослідження та розробка патчів для Wii U", + "picture": "https://github.com/ashquarky.png", + "github": "https://github.com/ashquarky", + "name": "quarky" + }, + { + "picture": "https://github.com/supermariodabom.png", + "github": "https://github.com/SuperMarioDaBom", + "caption": "Системні дослідження та архітектура серверів", + "name": "SuperMarioDaBom" + }, + { + "name": "pinklimes", + "caption": "Веб-розробка", + "github": "https://github.com/gitlimes.png", + "picture": "https://github.com/gitlimes.png" + }, + { + "name": "Shutterbug2000", + "caption": "Системні дослідження та розробка серверів", + "picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128", + "github": "https://github.com/shutterbug2000" + }, + { + "name": "Billy", + "picture": "https://github.com/InternalLoss.png", + "caption": "Збереження та серверна архітектура", + "github": "https://github.com/InternalLoss" + }, + { + "picture": "https://github.com/danielectra.png", + "github": "https://github.com/DaniElectra", + "name": "DaniElectra", + "caption": "Системні дослідження та розробка серверів" + }, + { + "caption": "Веб та серверна розробка", + "picture": "https://github.com/hauntii.png", + "name": "niko", + "github": "https://github.com/hauntii" + }, + { + "caption": "DevOps та робота з спільнотою", + "name": "MatthewL246", + "picture": "https://github.com/MatthewL246.png", + "github": "https://github.com/MatthewL246" + }, + { + "name": "wolfendale", + "picture": "https://github.com/wolfendale.png", + "caption": "Розробка та оптимізація серверів", + "github": "https://github.com/wolfendale" + }, + { + "name": "TraceEntertains", + "caption": "Розробка та дослідження патчів для 3DS", + "picture": "https://github.com/TraceEntertains.png", + "github": "https://github.com/TraceEntertains" + } + ] }, "nav": { "credits": "Титри", "progress": "Прогрес", - "blog": "Блог", + "blog": "Блоґ", "about": "Про", "faq": "ЧаПи", "accountWidget": { @@ -77,23 +163,23 @@ "logout": "Вийти" }, "docs": "Документи", - "account": "Обликовий запис", + "account": "Обліковий запис", "donate": "Пожертвувати", "dropdown": { "captions": { "credits": "Зустрічайте команду", "blog": "Наші останні оновлення, скорочено", - "progress": "Проверіти прогресс проекту, та ціли", - "about": "Про проект", - "faq": "Найчастіше задаваїми питання" + "progress": "Проверіти прогресс проєкту та цілі", + "about": "Про проєкт", + "faq": "Часті питання" } } }, "hero": { "subtitle": "Ігрові сервери", - "title": "Відтворени", + "title": "Відтворені", "buttons": { - "readMore": "Читати далі" + "readMore": "Читати більше" }, "text": "Pretendo — це безкоштовна заміна серверів Nintendo з відкритим вихідним кодом як для 3DS, так і для Wii U, що дозволяє всім підключатися до Інтернету навіть після припинення роботи оригінальних серверів" }, @@ -103,60 +189,148 @@ }, "specialThanks": { "title": "Особлива подяка", - "text": "Без них Pretendo не було б таким, яким воно є сьогодні." + "text": "Без них Pretendo не було б таким, яким воно є сьогодні.", + "people": [ + { + "name": "Користувачі GitHub", + "caption": "Локалізації та інші внески", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "github": "https://github.com/PretendoNetwork" + }, + { + "name": "superwhiskers", + "picture": "https://github.com/superwhiskers.png", + "github": "https://github.com/superwhiskers", + "caption": "Розробка кранч-бібліотек" + }, + { + "name": "Stary", + "picture": "https://github.com/Stary2001.png", + "github": "https://github.com/Stary2001", + "caption": "Розробка 3DS та дисектор NEX" + }, + { + "name": "rverse", + "picture": "https://github.com/rverseTeam.png", + "github": "https://twitter.com/rverseClub", + "caption": "Поширення інформації про Miiverse" + }, + { + "caption": "Дослідження структур даних Nintendo", + "name": "Kinnay", + "picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128", + "special": "Особлива подяка", + "github": "https://github.com/Kinnay" + }, + { + "name": "NinStar", + "caption": "Іконки для Mii Editor та реакцій Juxt", + "picture": "https://github.com/ninstar.png", + "github": "https://github.com/ninstar" + }, + { + "caption": "Дослідження консолей та ігрових серверів", + "picture": "https://github.com/EpicUsername12.png", + "github": "https://github.com/EpicUsername12", + "name": "Rambo6Glaz" + }, + { + "name": "GaryOderNichts", + "github": "https://github.com/GaryOderNichts", + "picture": "https://github.com/GaryOderNichts.png", + "caption": "Розробка патчів для Wii U" + }, + { + "picture": "https://cdn.discordapp.com/avatars/219324395707957248/c62573fbd4d26c8b4724f54413df6960.png?size=128", + "name": "zaksabeast", + "caption": "Розробник патчів для 3DS", + "github": "https://github.com/zaksabeast" + }, + { + "name": "mrjvs", + "caption": "Архітектура сервера", + "picture": "https://github.com/mrjvs.png", + "github": "https://github.com/mrjvs" + }, + { + "caption": "Архітектура сервера", + "github": "https://github.com/binaryoverload", + "picture": "https://github.com/binaryoverload.png", + "name": "binaryoverload" + }, + { + "name": "Simonx22", + "caption": "Ротації та дослідження Splatoon", + "picture": "https://github.com/Simonx22.png", + "github": "https://github.com/Simonx22" + }, + { + "github": "https://github.com/OatmealDome", + "name": "OatmealDome", + "caption": "Ротації та дослідження Splatoon", + "picture": "https://github.com/OatmealDome.png" + }, + { + "caption": "Локалізації та інші внески", + "picture": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", + "name": "Користувачі GitHub", + "github": "https://github.com/PretendoNetwork" + } + ] }, "discordJoin": { "title": "Будьте в курсі подій", - "text": "Приєднуйтесь до нашого сервера Discord, щоб отримувати останні оновлення про проект.", + "text": "Приєднуйтесь до нашого сервера Discord, щоб отримувати останні оновлення про проєкт.", "widget": { "button": "Приєднатися до серверу", "text": "Отримуйте оновлення в реальному часі про наш прогрес" } }, "footer": { - "socials": "Соціальні сеті", + "socials": "Соціальні мережі", "usefulLinks": "Корисні посилання", "widget": { "captions": [ - "Хочете бути в курсі?", + "Хочете бути в курсі подій?", "Приєднуйтесь до нашого сервера Discord!" ], "button": "Приєднуйся зараз!" }, "bandwidthRaccoonQuotes": [ - "Я Бандвих Єнот і мені подобається перекушувати кабелі до серверів Pretendo Network. Ням!", - "Багато людей питає нас : Чи будемо ми мати проблеми з Nintendo иза цого? Я дуже радий сказати, що моя тітка працуе в Nintendo, та вона ясказала що все добре.", - "Webkit версії 537 це найкраща версія Webkit для Wii U. Ні, ми не будемо портирувати Chrome на Wii U.", - "Я не можу дочекатися поки часи перейдуть відмітку 03:14:08 по UTC дев'ятнадцятого січеня 2038 року!", - "Wii U це недо оцінена консоль : Комерчіска реклама була дуже погана, але консоль дуже гарна. Зачекайте, я не дуже впевнений, чому мій контролер не приеднуется до Wii.", - "Super Mario World 2 - Головна тема острова Йоші - абсолютний боп (стиль жанру джаза), та ви не зможете переконати мене у зворотному.", - "Мої улюблені Nintendo Switch релізи це Nintendo Switch Online + Expansion Pack, Nintendo Switch Online + Rumble Pak, Nintendo Switch Online + Offline Play Pack, Nintendo Switch Online + Yet Another Port Pack, and Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Вам дуже сподобається Nintendo Wii U Virtual Console ігри, так що ми їх повертаемо обратно\" Пак. Вы можете серйозно сказати що Nintendo не байдуже.", - "Наприклад, \"Ти знаєш, Еш, благослови її серце, вона весь день Увукала\" - це південний приємний спосіб сказати: \"Еш увукала весь час, і це дійсно дивно і тупо, і я хотів би, щоб вони цього не зробили\"", - "Моє перше відео на моєму каналі!! Я вже давно хотів знімати відео, але мій ноутбук працював досить погано, і я не міг запускати Fraps, Skype і Minecraft одночасно. Але зараз на цьому все закінчиться! За допомогою мого ІТ-викладача мій ноутбук працює набагато краще, і я можу записувати зараз! Сподіваюся, вам усім сподобається, і якщо це так, будь ласка, поставте лайк і підпишіться!!!" + "Я єнот Бендвих, і я люблю гризти кабелі, що йдуть до серверів Pretendo Network. Ням!", + "Багато людей запитують нас, чи не виникнуть у нас юридичні проблеми з Nintendo через це; я радий повідомити, що моя тітка працює в Nintendo, і вона каже, що все в порядку.", + "Webkit v537 - найкраща версія Webkit для Wii U. Ні, ми не збираємося портувати Chrome на Wii U.", + "Не можу дочекатися, коли годинник досягне 03:14:08 UTC 19 січня 2038 року!", + "Wii U насправді недооцінена система: реклама була дуже поганою, але консоль чудова. Секундочку, не знаю чому, але мій геймпад не під'єднується до Wii.", + "Головна тема Super Mario World 2 - Yoshi's Island - це абсолютний боп, і ви ніяк не переконаєте мене в протилежному.", + "Моїми улюбленими релізами для Nintendo Switch були Nintendo Switch Online + розширення, Nintendo Switch Online + Rumble Pack, Nintendo Switch Online + офлайн-пакет, Nintendo Switch Online + ще один порт-пакет і Nintendo Switch Online + Dr. Kawashima's Brain Training / Brain Age \"Вам дуже сподобалася гра для віртуальної консолі Nintendo Wii U, тому ми повертаємо її назад\". Можна сказати, що Nintendo дійсно дбає про нас.", + "Наприклад, \"Ти знаєш, Еш, благослови її серце, вона весь день УвУкає\" - це південний приємний спосіб сказати: \"Еш увукає весь час, і це дійсно дивно і безглуздо, і я хотів би, щоб вона цього не робила\"", + "Моє перше відео на моєму каналі! Я давно хотів знімати відео, але мій ноутбук працював досить погано, і я не міг запускати fraps, skype і minecraft одночасно. але тепер це закінчилося! з деякою допомогою мого вчителя інформатики мій ноутбук працює набагато краще, і я можу записувати зараз! я сподіваюся, що вам сподобається, і якщо вам сподобається, будь ласка, ставте лайк і підписуйтесь!!!", + "Як на мене, виглядає непогано." ] }, "blogPage": { - "title": "Блог", + "title": "Блоґ", "publishedOn": "у", "published": "Опубліковано", - "description": "" + "description": "Останні оновлення у стислому вигляді. Якщо ви хочете бачити частіші оновлення, підтримайте нас." }, "account": { "loginForm": { - "login": "Логін", + "login": "Лоґін", "register": "Зареєструватися", "username": "Ім'я користувача", "password": "Пароль", "confirmPassword": "Підтвердьте пароль", "email": "Електронна пошта", "miiName": "Ім'я Mii", - "registerPrompt": "Немає аккаунту?", - "loginPrompt": "Вже є аккаунт?", + "registerPrompt": "Немає акаунту?", + "loginPrompt": "Вже є акаунт?", "detailsPrompt": "Введіть дані свого облікового запису нижче", "forgotPassword": "Забули пароль?" }, "settings": { - "upgrade": "Прокачати аккаунт", + "upgrade": "Прокачати акаунт", "settingCards": { "profile": "Профіль", "nickname": "Нікнейм", @@ -172,26 +346,24 @@ "otherSettings": "Інші налаштування", "discord": "Discord", "connectedToDiscord": "Підключений до Discord як", - "removeDiscord": "Вийти з аккаунту Discord", - "noDiscordLinked": "Аккаунт Discord не пов’язано.", + "removeDiscord": "Вийти з акаунту Discord", + "noDiscordLinked": "Акаунт Discord не пов’язано.", "passwordPrompt": "Введіть свій пароль PNID, щоб завантажити файли Cemu", "serverEnv": "Серверне середовище", "hasAccessPrompt": "Ваш поточний рівень надає вам доступ до бета-сервера. Круто!", "gender": "Стать", "beta": "Бета", - "upgradePrompt": "Бета-сервери призначені виключно для бета-тестерів.
Щоб стати бета-тестером, прокачайте аккаунт до вищого рівня.", + "upgradePrompt": "Бета-сервери призначені виключно для бета-тестерів.
Щоб стати бета-тестером, прокачайте акаунт до вищого рівня.", "fullSignInHistory": "Переглянути повну історію входів", - "linkDiscord": "Прив'язати аккаунт Discord", + "linkDiscord": "Прив'язати акаунт Discord", "newsletter": "Розсилка новин", "newsletterPrompt": "Отримувати оновлення проекту електронною поштою (ви можете відмовитися в будь-який час)", "no_newsletter_notice": "Новини зараз не доступні. Спробуйте пізніше", - "userSettings": "Налаштування Користувача", + "userSettings": "Налаштування користувача", "no_signins_notice": "Вхідна історія зараз не відстежується. Спробуйте пізніше!", "no_edit_from_dashboard": "Редагування налаштувань PNID з інформаційної панелі користувача зараз не доступна. Будь ласка, оновіть налаштування користувача з прив'язаної ігрової консолі" }, - "downloadFilesDescription": "(не працюватиме в Nintendo Network)", - "downloadFiles": "Завантажити файли облікового запису", - "unavailable": "Не Доступно" + "unavailable": "Не доступно" }, "accountLevel": [ "Стандартний", @@ -199,7 +371,7 @@ "Модератор", "Розробник" ], - "banned": "Заблокован", + "banned": "Заблокований", "account": "Обліковий Запис", "forgotPassword": { "header": "Забув пароль", @@ -233,7 +405,7 @@ "upgradePush": "Щоб стати передплатником і отримати доступ до цікавих бонусів, відвідайте сторінку прокачки." }, "localizationPage": { - "title": "Локалізуємо", + "title": "Давайте локалізуємо", "instructions": "Переглянути інструкції з локалізації", "description": "Вставте посилання на загальнодоступну мову JSON, щоб протестувати її на веб-сайті", "fileInput": "Файл для тестування", @@ -254,11 +426,11 @@ } ] }, - "missingInLocale": "Ця сторінка недоступна у вашому регіоні. Будь ласка, перевірте англійську версію нижче.", + "missingInLocale": "Ця сторінка недоступна вашою мовою. Будь ласка, перевірте англійську версію нижче.", "sidebar": { "welcome": "Ласкаво просимо", - "juxt_err": "Коди помилки - Juxt", - "getting_started": "Починаемо", + "juxt_err": "Коди помилок - Juxt", + "getting_started": "Починаємо", "install_extended": "Встановити Pretendo", "install": "Встановити", "search": "Знайти" @@ -278,5 +450,8 @@ "cancel": "Скасувати", "confirm": "Підтвердити", "close": "Закрити" + }, + "notfound": { + "description": "Упс! Сторінка не знайдена." } } diff --git a/locales/zh_CN.json b/locales/zh_CN.json index 6c1280f..18f46ce 100644 --- a/locales/zh_CN.json +++ b/locales/zh_CN.json @@ -2,11 +2,11 @@ "nav": { "about": "关于", "faq": "FAQ", - "docs": "文件", + "docs": "帮助文档", "credits": "贡献者", "progress": "进度", "blog": "博客", - "account": "用户", + "account": "账户", "accountWidget": { "settings": "设置", "logout": "登出" @@ -15,7 +15,7 @@ "dropdown": { "captions": { "about": "我们的项目", - "faq": "经常问到的问题", + "faq": "常见问题", "blog": "我们最近的更新(简化版)", "credits": "我们的团队", "progress": "查看目前的进度与目标" @@ -25,7 +25,7 @@ "hero": { "subtitle": "游戏服务器", "title": "重新创建", - "text": "Pretendo 是任天堂 3DS 和 Wii U 服务器的免费和开源替代品,允许所有人在线连接,即使在原始服务器已经关闭", + "text": "Pretendo 是任天堂 3DS 和 Wii U 服务器的免费和开源替代品,允许所有人在线连接,即使在任天堂官方服务器不再运行", "buttons": { "readMore": "更多" } @@ -34,54 +34,54 @@ "title": "关于我们", "paragraphs": [ "Pretendo 是一个开源项目,旨在使用逆向工程为 3DS 和 Wii U 重新创建 Nintendo Network。", - "我们的服务将是免费和开源的,它们可以在 Nintendo Network 不可避免的关闭之后还存在。" + "此服务免费且开源,即使任天堂官方停服后也仍然可用。" ] }, "progress": { "title": "进度", - "githubRepo": "Github 信息库" + "githubRepo": "Github 存储库" }, "faq": { "title": "常见问题", - "text": "以下是我们被问到的一些常见问题,以获得简单的信息。", + "text": "以下是针对常见问题的简要的答案。", "QAs": [ { "question": "什么是 Pretendo?", "answer": "Pretendo 是一个开源的 Nintendo Network 替代品,旨在为 Wii U 和 3DS 系列游戏机构建自定义服务器。我们的目标是保留这些游戏机的在线功能,让玩家可以继续尽情畅玩他们最喜欢的 Wii U 和 3DS 游戏。" }, { - "question": "我现有的 NNID 可以在 Pretendo 上工作吗?", - "answer": "遗憾的是,不行。现有的 NNID 将无法在 Pretendo 上运行,因为只有任天堂拥有您的用户数据;虽然 NNID 到 PNID 的迁移在理论上是可能的,但它存在风险并且需要我们不希望持有的敏感用户数据。" + "question": "现有的 NNID 能用于 Pretendo 吗?", + "answer": "遗憾的是,不行。因为只有任天堂拥有您的用户数据,现有的 NNID 不可以用于 Pretendo ;虽然 NNID 到 PNID 的迁移在理论上是可能的,但它存在风险并且需要我们不希望持有的敏感用户数据。" }, { "question": "如何使用 Pretendo?", - "answer": "Pretendo 目前尚未处于可供公众使用的状态。但是,一旦完成,您只需在系统上运行我们的自制补丁程序即可使用 Pretendo。" + "answer": "Pretendo 目前尚未准备好供公众使用。一旦我们准备就绪,您只需在机器上运行我们提供的自制补丁,即可开始使用。" }, { - "question": "你知道 功能/服务 什么时候准备好吗?", + "question": "什么时候某某功能/服务能完成?", "answer": "不可以。许多 Pretendo 的功能/服务是独立开发的(例如,Miiverse 可能由一位开发人员构建,而 Accounts 和 Friends 正在由另一位开发人员构建),因此我们无法给出这需要多长时间的总体预计到达时间。" }, { - "question": "Pretendo 是否适用于 Cemu/模拟器?", - "answer": "Pretendo 支持任何可以与任天堂网络交互的客户端。目前唯一具有这种功能的虚拟机是 Cemu。 Cemu 2.0 在模拟器中的网络帐户选项下正式官方支持 Pretendo。有关如何开始使用 Cemu 的信息,请查看文档
Citra 不支持真实在线多人联接,并且因此不适用于 Pretendo,并且根本没有显示出支持真正在线游戏的迹象。 Mikage,一种用于移动设备的 3DS 模拟器,可能会在未来提供支持,尽管这还远未确定。" + "question": "什么时候会添加更多游戏?", + "answer": "Pretendo 支持任何可以与任天堂网络交互的客户端。目前唯一具有此功能的模拟器是 Cemu。 Cemu 2.0 在模拟器中的网络帐户选项下已正式支持了 Pretendo。有关开始使用 Cemu 的信息,请查阅文档。Citra 不支持真正意义上的在线多人联机,因此 Pretendo 在 Citra 上不可用,并且完全没有在未来支持在线多人联机的迹象。Mikage,一款用于移动设备的 3DS 模拟器,可能会在未来支持在线多人联机,尽管这尚不确定。" }, { - "question": "如果我在 Nintendo Network 上被封账号,我在使用 Pretendo 时还会被禁吗?", - "answer": "我们将无法访问 Nintendo Network 的禁令,并且不会禁止所有用户使用我们的服务。但是,我们在使用服务时将遵守规则,不遵守这些规则可能会导致被禁止。" + "question": "我只有模拟器,可以使用Pretendo吗?", + "answer": "我们无法访问 Nintendo Network 的用户黑名单,因此不会禁止任何用户使用我们的服务。但是,使用本服务时也需要遵守规则,否则可能会导致被禁。" }, { "question": "Pretendo 会支持 Wii/Switch 吗?", - "answer": "Wii 已经有 Wiimmfi 提供的自定义服务器。我们目前不希望以 Switch 为目标,因为它既是付费的,又与 Nintendo Network 完全不同。" + "answer": "Cemu 2.1 在模拟器的网络帐户选项下正式支持 Pretendo。有关如何开始设置 Cemu 的信息,请查看documentation.
一些 3DS 模拟器或分支可能支持我们,但目前我们没有任何官方建议或设置说明。Citra 的最终版本目前不支持 Pretendo。" }, { - "question": "我需要黑客来连接吗?", + "question": "Pretendo会支持 Wii/Switch 吗?", "answer": "是的,您需要破解您的设备才能连接;但是,在 Wii U 上,您只需要访问 Homebrew Launcher(即 Haxchi、Coldboot Haxchi 甚至网络浏览器漏洞利用程序),稍后会提供有关 3DS 将如何连接的信息。" } ] }, "showcase": { "title": "我们做什么", - "text": "我们的项目有很多组件。这里是其中的一些。", + "text": "我们的项目包含很多组件。以下是其中一部分。", "cards": [ { "title": "游戏服务器", @@ -89,10 +89,10 @@ }, { "title": "Juxtaposition", - "caption": "对 Miiverse 的重新想象,仿佛它是在现代时代制造的。" + "caption": "对Miiverse的重新构想,让它在当代焕然一新。" }, { - "title": "支持 Cemu", + "title": "Cemu 支持", "caption": "即使没有硬件也能玩你最喜欢的 Wii U 游戏!" } ] @@ -141,7 +141,7 @@ }, "blogPage": { "title": "博客", - "description": "", + "description": "最新的更新都浓缩在这里。如果你需要更频繁的更新,请查看 捐赠.", "published": "作者", "publishedOn": "在" }, @@ -230,8 +230,6 @@ "no_signins_notice": "目前没有任何登录历史。请稍后再试!", "no_edit_from_dashboard": "目前无法编辑在此页面修改 PNID 设置。请通过你的游戏设备修改" }, - "downloadFiles": "下载账号文件", - "downloadFilesDescription": "(无法在任天堂网络上使用)", "upgrade": "升级账号", "unavailable": "无法获得" }, diff --git a/locales/zh_Hant.json b/locales/zh_Hant.json index 839f477..35dc244 100644 --- a/locales/zh_Hant.json +++ b/locales/zh_Hant.json @@ -59,7 +59,7 @@ }, { "question": "我現有的 NNID 可以用在 Pretendo 上嗎?", - "answer": "很抱歉,不行。你現有的 NNID 不能用於 Pretendo,你的帳號資料都在任天堂手上,雖然 NNID 到 PNID 的遷徙理論上是能做到的,但是存在風險並且會包含我們不想知道的個人隱私。" + "answer": "很抱歉,不行。你現有的 NNID 不能用於 Pretendo,你的帳號資料都在任天堂手上,雖然 NNID 到 PNID 的轉移理論上是能做到的,但是存在風險並且會包含我們不想知道的個人隱私。" }, { "question": "如何使用 Pretendo ?", diff --git a/package-lock.json b/package-lock.json index bd4447e..6064145 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ "dependencies": { "@aws-sdk/client-ses": "^3.515.0", "@discordjs/rest": "^0.5.0", + "@node-saml/node-saml": "^5.0.0", + "@pretendonetwork/error-codes": "^1.0.3", + "@pretendonetwork/grpc": "^2.2.3", "browserify": "^17.0.0", "colors": "^1.4.0", "cookie-parser": "^1.4.5", @@ -28,11 +31,14 @@ "mii-js": "github:PretendoNetwork/mii-js#v1.0.4", "mongoose": "^6.4.0", "morgan": "^1.10.0", + "nice-grpc": "^2.1.13", "nodemailer": "^6.7.5", "stripe": "^9.9.0" }, "devDependencies": { - "eslint": "^7.32.0" + "@pretendonetwork/eslint-config": "^0.0.6", + "eslint": "^9.18.0", + "globals": "^15.14.0" } }, "node_modules/@aws-crypto/crc32": { @@ -1183,108 +1189,11 @@ "tslib": "^2.3.1" } }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/@bufbuild/protobuf": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.9.0.tgz", + "integrity": "sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==", + "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@discordjs/collection": { "version": "0.7.0", @@ -1315,33 +1224,85 @@ "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "node_modules/@eslint-community/eslint-plugin-eslint-comments": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", + "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "escape-string-regexp": "^4.0.0", + "ignore": "^5.2.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1352,12 +1313,131 @@ } } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@fastify/busboy": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", @@ -1366,25 +1446,143 @@ "node": ">=14" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, + "node_modules/@grpc/grpc-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", + "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" }, "engines": { - "node": ">=10.10.0" + "node": ">=12.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", + "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@node-saml/node-saml": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@node-saml/node-saml/-/node-saml-5.0.0.tgz", + "integrity": "sha512-4JGubfHgL5egpXiuo9bupSGn6mgpfOQ/brZZvv2Qiho5aJmW7O1khbjdB7tsTsCvNFtLLjQqm3BmvcRicJyA2g==", + "dependencies": { + "@types/debug": "^4.1.12", + "@types/qs": "^6.9.11", + "@types/xml-encryption": "^1.2.4", + "@types/xml2js": "^0.4.14", + "@xmldom/is-dom-node": "^1.0.1", + "@xmldom/xmldom": "^0.8.10", + "debug": "^4.3.4", + "xml-crypto": "^6.0.0", + "xml-encryption": "^3.0.2", + "xml2js": "^0.6.2", + "xmlbuilder": "^15.1.1", + "xpath": "^0.0.34" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@node-saml/node-saml/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -1397,27 +1595,156 @@ } } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "node_modules/@node-saml/node-saml/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", - "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", - "optional": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { - "sparse-bitfield": "^3.0.3" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@pretendonetwork/error-codes": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@pretendonetwork/error-codes/-/error-codes-1.0.3.tgz", + "integrity": "sha512-Kfj/WeaKLTQ8TJAGeTnMZVmGq3W6Ypzy383DITsVxVpViJY6e2fdtmXRoPhL5a/7UIR0HUJKGwPALEdLeNicAw==" + }, + "node_modules/@pretendonetwork/eslint-config": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@pretendonetwork/eslint-config/-/eslint-config-0.0.6.tgz", + "integrity": "sha512-05mveVecjyadnKrY4dBDtdt3UE3j+1HMEHuFbLfwmb/g3749VL4Bnop1HiuNkUY9p1AhYXHmVJQsicFhWzGP1g==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", + "@stylistic/eslint-plugin": "^2.12.1", + "@typescript-eslint/parser": "^8.20.0", + "eslint": "^9.17.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "typescript-eslint": "^8.19.1" + } + }, + "node_modules/@pretendonetwork/grpc": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-2.2.3.tgz", + "integrity": "sha512-bTyUtFPT1/IwAWix9nkNZlmUUlG/k0F6YnARpNIceg9F6Mw1iHvGvMwvuX06PY9svnKDUeGdyR41rl/YUilfBQ==", + "license": "AGPL-3.0-only", + "dependencies": { + "@bufbuild/protobuf": "^2.2.2", + "nice-grpc-common": "^2.0.2", + "typescript": "^5.7.2" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@sapphire/async-queue": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz", @@ -1982,6 +2309,25 @@ "node": ">=14.0.0" } }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz", + "integrity": "sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -2004,11 +2350,37 @@ "@types/responselike": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/keyv": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", @@ -2017,11 +2389,21 @@ "@types/node": "*" } }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "16.11.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -2044,6 +2426,309 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@types/xml-encryption": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/xml-encryption/-/xml-encryption-1.2.4.tgz", + "integrity": "sha512-I69K/WW1Dv7j6O3jh13z0X8sLWJRXbu5xnHDl9yHzUNDUBtUoBY058eb5s+x/WG6yZC1h8aKdI2EoyEPjyEh+Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/xml2js": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", + "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz", + "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/type-utils": "8.20.0", + "@typescript-eslint/utils": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.20.0.tgz", + "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", + "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz", + "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/utils": "8.20.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@typescript-eslint/types": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz", + "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", + "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.20.0.tgz", + "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", + "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.20.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@xmldom/is-dom-node": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@xmldom/is-dom-node/-/is-dom-node-1.0.1.tgz", + "integrity": "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==", + "engines": { + "node": ">= 16" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abort-controller-x": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.4.3.tgz", + "integrity": "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==", + "license": "MIT" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2110,20 +2795,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2132,7 +2808,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2156,11 +2831,124 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -2199,15 +2987,6 @@ "inherits": "2.0.1" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2222,9 +3001,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2325,6 +3107,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -2619,12 +3413,44 @@ "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2664,6 +3490,20 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -2676,7 +3516,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2687,8 +3526,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colors": { "version": "1.4.0", @@ -2884,9 +3722,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -2923,6 +3761,57 @@ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2970,15 +3859,37 @@ "node": ">=10" } }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "object-keys": "^1.0.12" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/defined": { @@ -3077,15 +3988,15 @@ "license": "MIT" }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/domain-browser": { @@ -3097,6 +4008,19 @@ "npm": ">=1.2" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -3133,7 +4057,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -3151,43 +4075,76 @@ "once": "^1.4.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8.6" + "node": ">=10.13.0" } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -3196,14 +4153,66 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -3212,6 +4221,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3230,106 +4248,263 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.7", + "enhanced-resolve": "^5.15.0", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/debug": { @@ -3356,26 +4531,32 @@ "dev": true }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/espree/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, "node_modules/esprima": { @@ -3391,9 +4572,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -3402,15 +4583,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3423,19 +4595,10 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -3600,6 +4763,34 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3609,7 +4800,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fast-safe-stringify": { @@ -3638,16 +4829,37 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/finalhandler": { @@ -3678,29 +4890,48 @@ "node": ">= 0.8" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } }, "node_modules/form-data": { "version": "3.0.1", @@ -3751,34 +4982,91 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -3794,12 +5082,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -3808,6 +5098,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.9.0.tgz", + "integrity": "sha512-52n24W52sIueosRe0XZ8Ex5Yle+WbhfCKnV/gWXpbVR8FXNTfqdKEKUSypKso66VRHTvvcQxL44UTZbJRlCTnw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3828,32 +5130,56 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -3883,6 +5209,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/graphql": { "version": "16.8.1", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", @@ -3951,9 +5283,13 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3967,10 +5303,36 @@ "node": ">=8" } }, - "node_modules/has-symbols": { + "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -3979,11 +5341,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4046,6 +5408,17 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -4132,9 +5505,9 @@ ] }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -4216,13 +5589,14 @@ } }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4256,24 +5630,64 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4287,10 +5701,19 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -4299,22 +5722,44 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4334,17 +5779,32 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4364,9 +5824,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -4375,10 +5835,11 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4386,12 +5847,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4401,12 +5873,15 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -4415,20 +5890,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4438,11 +5934,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4452,15 +5951,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -4469,12 +5964,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4488,13 +6015,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/js-yaml": { @@ -4526,6 +6047,18 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -4569,9 +6102,9 @@ } }, "node_modules/keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { "json-buffer": "3.0.1" } @@ -4606,11 +6139,26 @@ "node": ">= 0.8.0" } }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "3.0.4", @@ -4622,11 +6170,11 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" }, "node_modules/lowercase-keys": { "version": "2.0.0", @@ -4636,18 +6184,6 @@ "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/marked": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", @@ -4659,6 +6195,14 @@ "node": ">= 12" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -4688,6 +6232,15 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -4696,6 +6249,31 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mii-js": { "version": "1.0.4", "resolved": "git+ssh://git@github.com/PretendoNetwork/mii-js.git#5d8eb8013514a13b0df6eb4a5bfd8b5a63fb9861", @@ -4949,6 +6527,26 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/nice-grpc": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.1.13.tgz", + "integrity": "sha512-IkXNok2NFyYh0WKp1aJFwFV3Ue2frBkJ16ojrmgX3Tc9n0g7r0VU+ur3H/leDHPPGsEeVozdMynGxYT30k3D/Q==", + "license": "MIT", + "dependencies": { + "@grpc/grpc-js": "^1.14.0", + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^2.0.2" + } + }, + "node_modules/nice-grpc-common": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz", + "integrity": "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==", + "license": "MIT", + "dependencies": { + "ts-error": "^1.0.6" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -5015,9 +6613,12 @@ } }, "node_modules/object-inspect": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5026,18 +6627,22 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -5047,6 +6652,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -5075,9 +6730,9 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { "deep-is": "^0.1.3", @@ -5085,7 +6740,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -5096,6 +6751,23 @@ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -5104,6 +6776,36 @@ "node": ">=8" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -5154,6 +6856,15 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5204,6 +6915,26 @@ "node": ">=0.12" } }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5226,13 +6957,28 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": ">=12.0.0" } }, "node_modules/proxy-addr": { @@ -5313,6 +7059,26 @@ "node": ">=0.4.x" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -5393,34 +7159,71 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5440,6 +7243,15 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/responselike": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", @@ -5448,19 +7260,14 @@ "lowercase-keys": "^2.0.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, "node_modules/ripemd160": { @@ -5472,16 +7279,108 @@ "inherits": "^2.0.1" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -5495,13 +7394,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5562,6 +7458,51 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -5614,13 +7555,68 @@ "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5650,23 +7646,6 @@ } ] }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -5706,6 +7685,12 @@ "memory-pager": "^1.0.2" } }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -5806,55 +7791,96 @@ ] }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -5912,6 +7938,17 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", @@ -5920,51 +7957,15 @@ "acorn-node": "^1.2.0" } }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=10.0.0" + "node": ">=6" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -5990,6 +7991,18 @@ "node": ">=0.6.0" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -6009,6 +8022,36 @@ "node": ">=12" } }, + "node_modules/ts-api-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-error": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz", + "integrity": "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==", + "license": "MIT" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -6031,18 +8074,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -6055,11 +8086,119 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.20.0.tgz", + "integrity": "sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.20.0", + "@typescript-eslint/parser": "8.20.0", + "@typescript-eslint/utils": "8.20.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, "node_modules/uglify-js": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.2.tgz", @@ -6084,14 +8223,18 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6196,12 +8339,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -6251,31 +8388,86 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6298,11 +8490,106 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "node_modules/xml-crypto": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-6.0.0.tgz", + "integrity": "sha512-L3RgnkaDrHaYcCnoENv4Idzt1ZRj5U1z1BDH98QdDTQfssScx8adgxhd9qwyYo+E3fXbQZjEQH7aiXHLVgxGvw==", + "dependencies": { + "@xmldom/is-dom-node": "^1.0.1", + "@xmldom/xmldom": "^0.8.10", + "xpath": "^0.0.33" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/xml-crypto/node_modules/xpath": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.33.tgz", + "integrity": "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==", + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/xml-encryption": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-3.0.2.tgz", + "integrity": "sha512-VxYXPvsWB01/aqVLd6ZMPWZ+qaj0aIdF+cStrVJMcFj3iymwZeI0ABzB3VqMYv48DkSpRhnrXqTUkR34j+UDyg==", + "dependencies": { + "@xmldom/xmldom": "^0.8.5", + "escape-html": "^1.0.3", + "xpath": "0.0.32" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/xml-encryption/node_modules/xpath": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", + "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xpath": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.34.tgz", + "integrity": "sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==", + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -6311,11 +8598,53 @@ "node": ">=0.4" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -7321,89 +9650,10 @@ "tslib": "^2.3.1" } }, - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "@bufbuild/protobuf": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.9.0.tgz", + "integrity": "sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==" }, "@discordjs/collection": { "version": "0.7.0", @@ -7430,79 +9680,219 @@ } } }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "@eslint-community/eslint-plugin-eslint-comments": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", + "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "escape-string-regexp": "^4.0.0", + "ignore": "^5.2.4" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true + }, + "@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, + "@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, + "@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "dev": true + }, + "@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "requires": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + } + }, "@fastify/busboy": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==" }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "@grpc/grpc-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", + "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "requires": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + } + }, + "@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + } + }, + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true } } }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, + "@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true + }, + "@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==" + }, "@mongodb-js/saslprep": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", @@ -7512,6 +9902,162 @@ "sparse-bitfield": "^3.0.3" } }, + "@node-saml/node-saml": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@node-saml/node-saml/-/node-saml-5.0.0.tgz", + "integrity": "sha512-4JGubfHgL5egpXiuo9bupSGn6mgpfOQ/brZZvv2Qiho5aJmW7O1khbjdB7tsTsCvNFtLLjQqm3BmvcRicJyA2g==", + "requires": { + "@types/debug": "^4.1.12", + "@types/qs": "^6.9.11", + "@types/xml-encryption": "^1.2.4", + "@types/xml2js": "^0.4.14", + "@xmldom/is-dom-node": "^1.0.1", + "@xmldom/xmldom": "^0.8.10", + "debug": "^4.3.4", + "xml-crypto": "^6.0.0", + "xml-encryption": "^3.0.2", + "xml2js": "^0.6.2", + "xmlbuilder": "^15.1.1", + "xpath": "^0.0.34" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true + }, + "@pretendonetwork/error-codes": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@pretendonetwork/error-codes/-/error-codes-1.0.3.tgz", + "integrity": "sha512-Kfj/WeaKLTQ8TJAGeTnMZVmGq3W6Ypzy383DITsVxVpViJY6e2fdtmXRoPhL5a/7UIR0HUJKGwPALEdLeNicAw==" + }, + "@pretendonetwork/eslint-config": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@pretendonetwork/eslint-config/-/eslint-config-0.0.6.tgz", + "integrity": "sha512-05mveVecjyadnKrY4dBDtdt3UE3j+1HMEHuFbLfwmb/g3749VL4Bnop1HiuNkUY9p1AhYXHmVJQsicFhWzGP1g==", + "dev": true, + "requires": { + "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", + "@stylistic/eslint-plugin": "^2.12.1", + "@typescript-eslint/parser": "^8.20.0", + "eslint": "^9.17.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "typescript-eslint": "^8.19.1" + } + }, + "@pretendonetwork/grpc": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-2.2.3.tgz", + "integrity": "sha512-bTyUtFPT1/IwAWix9nkNZlmUUlG/k0F6YnARpNIceg9F6Mw1iHvGvMwvuX06PY9svnKDUeGdyR41rl/YUilfBQ==", + "requires": { + "@bufbuild/protobuf": "^2.2.2", + "nice-grpc-common": "^2.0.2", + "typescript": "^5.7.2" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "@sapphire/async-queue": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz", @@ -7954,6 +10500,19 @@ "tslib": "^2.5.0" } }, + "@stylistic/eslint-plugin": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz", + "integrity": "sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + } + }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -7973,11 +10532,37 @@ "@types/responselike": "*" } }, + "@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "requires": { + "@types/ms": "*" + } + }, + "@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, "@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/keyv": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", @@ -7986,11 +10571,21 @@ "@types/node": "*" } }, + "@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "@types/node": { "version": "16.11.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" }, + "@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, "@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -8013,6 +10608,202 @@ "@types/webidl-conversions": "*" } }, + "@types/xml-encryption": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/xml-encryption/-/xml-encryption-1.2.4.tgz", + "integrity": "sha512-I69K/WW1Dv7j6O3jh13z0X8sLWJRXbu5xnHDl9yHzUNDUBtUoBY058eb5s+x/WG6yZC1h8aKdI2EoyEPjyEh+Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/xml2js": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", + "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz", + "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/type-utils": "8.20.0", + "@typescript-eslint/utils": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.20.0.tgz", + "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", + "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz", + "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/utils": "8.20.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz", + "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", + "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.20.0.tgz", + "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", + "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.20.0", + "eslint-visitor-keys": "^4.2.0" + } + }, + "@xmldom/is-dom-node": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@xmldom/is-dom-node/-/is-dom-node-1.0.1.tgz", + "integrity": "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==" + }, + "@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==" + }, + "abort-controller-x": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.4.3.tgz", + "integrity": "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -8061,23 +10852,15 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -8097,11 +10880,88 @@ } } }, + "array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + } + }, + "array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + } + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -8144,12 +11004,6 @@ } } }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -8161,9 +11015,12 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "balanced-match": { "version": "1.0.0", @@ -8236,6 +11093,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -8481,12 +11347,32 @@ "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" } }, "callsites": { @@ -8514,6 +11400,16 @@ "safe-buffer": "^5.0.1" } }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -8526,7 +11422,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -8534,8 +11429,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colors": { "version": "1.4.0", @@ -8699,9 +11593,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -8732,6 +11626,39 @@ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" }, + "data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + } + }, + "data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + } + }, + "data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -8766,12 +11693,25 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "requires": { - "object-keys": "^1.0.12" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "defined": { @@ -8852,9 +11792,9 @@ "from": "discord-oauth2@github:ryanblenis/discord-oauth2" }, "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -8865,6 +11805,16 @@ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -8902,8 +11852,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -8918,52 +11867,130 @@ "once": "^1.4.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "dev": true, "requires": { - "ansi-colors": "^4.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" } }, "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" } }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -8976,51 +12003,45 @@ "dev": true }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3" }, "dependencies": { "debug": { @@ -9040,54 +12061,174 @@ } } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" }, "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, + "eslint-import-resolver-typescript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", + "dev": true, + "requires": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.7", + "enhanced-resolve": "^5.15.0", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "requires": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true } } @@ -9098,20 +12239,12 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } }, "esrecurse": { @@ -9121,20 +12254,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -9254,6 +12379,30 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -9263,7 +12412,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fast-safe-stringify": { @@ -9279,13 +12428,31 @@ "strnum": "^1.0.5" } }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, "requires": { - "flat-cache": "^3.0.4" + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -9312,26 +12479,39 @@ } } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" } }, "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } }, "form-data": { "version": "3.0.1", @@ -9370,14 +12550,28 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "get-assigned-identifiers": { @@ -9385,14 +12579,35 @@ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, "get-stream": { @@ -9404,12 +12619,23 @@ } }, "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + } + }, + "get-tsconfig": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.9.0.tgz", + "integrity": "sha512-52n24W52sIueosRe0XZ8Ex5Yle+WbhfCKnV/gWXpbVR8FXNTfqdKEKUSypKso66VRHTvvcQxL44UTZbJRlCTnw==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" } }, "glob": { @@ -9426,23 +12652,35 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "dev": true + }, + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" } }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, "got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -9466,6 +12704,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "graphql": { "version": "16.8.1", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", @@ -9514,9 +12758,10 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -9524,17 +12769,34 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-symbols": { + "has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "hash-base": { @@ -9573,6 +12835,14 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -9633,9 +12903,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, "import-fresh": { @@ -9701,13 +12971,14 @@ } }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" } }, "ip": { @@ -9729,21 +13000,46 @@ "has-tostringtag": "^1.0.0" } }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, "requires": { - "has-bigints": "^1.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + } + }, + "is-async-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, + "is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "requires": { + "has-bigints": "^1.0.2" } }, "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-buffer": { @@ -9751,25 +13047,47 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "requires": { + "semver": "^7.6.3" + } + }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.2" + } + }, + "is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" } }, "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-extendable": { @@ -9780,14 +13098,22 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-function": { "version": "1.0.10", @@ -9798,75 +13124,115 @@ } }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true + }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } }, "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, "requires": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" } }, "is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.16" } }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true + }, "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, "isarray": { @@ -9877,13 +13243,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "js-yaml": { @@ -9912,6 +13272,15 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -9941,9 +13310,9 @@ "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" }, "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "requires": { "json-buffer": "3.0.1" } @@ -9972,11 +13341,19 @@ "type-check": "~0.4.0" } }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.memoize": { "version": "3.0.4", @@ -9988,31 +13365,26 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "marked": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==" }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -10039,11 +13411,35 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, "mii-js": { "version": "git+ssh://git@github.com/PretendoNetwork/mii-js.git#5d8eb8013514a13b0df6eb4a5bfd8b5a63fb9861", "from": "mii-js@github:PretendoNetwork/mii-js#v1.0.4", @@ -10243,6 +13639,24 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "nice-grpc": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.1.13.tgz", + "integrity": "sha512-IkXNok2NFyYh0WKp1aJFwFV3Ue2frBkJ16ojrmgX3Tc9n0g7r0VU+ur3H/leDHPPGsEeVozdMynGxYT30k3D/Q==", + "requires": { + "@grpc/grpc-js": "^1.14.0", + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^2.0.2" + } + }, + "nice-grpc-common": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz", + "integrity": "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==", + "requires": { + "ts-error": "^1.0.6" + } + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -10288,26 +13702,65 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + } + }, + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + } + }, + "object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -10330,9 +13783,9 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -10340,7 +13793,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" } }, "os-browserify": { @@ -10348,11 +13801,40 @@ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, + "own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + } + }, "p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -10397,6 +13879,12 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -10435,6 +13923,17 @@ "sha.js": "^2.4.8" } }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10451,11 +13950,24 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } }, "proxy-addr": { "version": "2.0.7", @@ -10518,6 +14030,12 @@ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -10588,25 +14106,49 @@ } } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + } }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-alpn": { @@ -10620,6 +14162,12 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, "responselike": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", @@ -10628,14 +14176,11 @@ "lowercase-keys": "^2.0.0" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "ripemd160": { "version": "2.0.2", @@ -10646,16 +14191,80 @@ "inherits": "^2.0.1" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, "section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -10666,13 +14275,10 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true }, "send": { "version": "0.18.0", @@ -10720,6 +14326,42 @@ "send": "0.18.0" } }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "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" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, + "set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -10763,13 +14405,47 @@ "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "sift": { @@ -10782,17 +14458,6 @@ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -10821,6 +14486,12 @@ "memory-pager": "^1.0.2" } }, + "stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -10904,43 +14575,67 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, "strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -10983,6 +14678,11 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", @@ -10991,44 +14691,10 @@ "acorn-node": "^1.2.0" } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "through": { @@ -11053,6 +14719,15 @@ "process": "~0.11.0" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -11066,6 +14741,30 @@ "punycode": "^2.1.1" } }, + "ts-api-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "dev": true, + "requires": {} + }, + "ts-error": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz", + "integrity": "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==" + }, + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -11085,12 +14784,6 @@ "prelude-ls": "^1.2.1" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -11100,11 +14793,80 @@ "mime-types": "~2.1.24" } }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, + "typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + } + }, + "typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + } + }, + "typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==" + }, + "typescript-eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.20.0.tgz", + "integrity": "sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "8.20.0", + "@typescript-eslint/parser": "8.20.0", + "@typescript-eslint/utils": "8.20.0" + } + }, "uglify-js": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.2.tgz", @@ -11120,14 +14882,15 @@ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" } }, "undeclared-identifiers": { @@ -11213,12 +14976,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -11253,28 +15010,70 @@ } }, "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + } + }, + "which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" } }, "which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" } }, "word-wrap": { @@ -11288,20 +15087,114 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "xml-crypto": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-6.0.0.tgz", + "integrity": "sha512-L3RgnkaDrHaYcCnoENv4Idzt1ZRj5U1z1BDH98QdDTQfssScx8adgxhd9qwyYo+E3fXbQZjEQH7aiXHLVgxGvw==", + "requires": { + "@xmldom/is-dom-node": "^1.0.1", + "@xmldom/xmldom": "^0.8.10", + "xpath": "^0.0.33" + }, + "dependencies": { + "xpath": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.33.tgz", + "integrity": "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==" + } + } + }, + "xml-encryption": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-3.0.2.tgz", + "integrity": "sha512-VxYXPvsWB01/aqVLd6ZMPWZ+qaj0aIdF+cStrVJMcFj3iymwZeI0ABzB3VqMYv48DkSpRhnrXqTUkR34j+UDyg==", + "requires": { + "@xmldom/xmldom": "^0.8.5", + "escape-html": "^1.0.3", + "xpath": "0.0.32" + }, + "dependencies": { + "xpath": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", + "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==" + } + } + }, + "xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "xpath": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.34.tgz", + "integrity": "sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/package.json b/package.json index 6554906..e15d68f 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,10 @@ "scripts": { "start": "node src/server.js", "build": "npm run browserify", - "browserify": "npm run browserify-miieditor && npm run browserify-forgot-password && npm run browserify-reset-password", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "browserify": "npm run browserify-miieditor && npm run browserify-reset-password", "browserify-miieditor": "browserify ./public/assets/js/miieditor.js -o ./public/assets/js/miieditor.bundled.js", - "browserify-forgot-password": "browserify ./public/assets/js/forgot-password.js -o ./public/assets/js/forgot-password.bundled.js", "browserify-reset-password": "browserify ./public/assets/js/reset-password.js -o ./public/assets/js/reset-password.bundled.js" }, "repository": { @@ -24,6 +25,9 @@ "dependencies": { "@aws-sdk/client-ses": "^3.515.0", "@discordjs/rest": "^0.5.0", + "@node-saml/node-saml": "^5.0.0", + "@pretendonetwork/error-codes": "^1.0.3", + "@pretendonetwork/grpc": "^2.2.3", "browserify": "^17.0.0", "colors": "^1.4.0", "cookie-parser": "^1.4.5", @@ -41,10 +45,13 @@ "mii-js": "github:PretendoNetwork/mii-js#v1.0.4", "mongoose": "^6.4.0", "morgan": "^1.10.0", + "nice-grpc": "^2.1.13", "nodemailer": "^6.7.5", "stripe": "^9.9.0" }, "devDependencies": { - "eslint": "^7.32.0" + "@pretendonetwork/eslint-config": "^0.0.6", + "eslint": "^9.18.0", + "globals": "^15.14.0" } } diff --git a/public/assets/css/404.css b/public/assets/css/404.css new file mode 100644 index 0000000..016adc0 --- /dev/null +++ b/public/assets/css/404.css @@ -0,0 +1,24 @@ +.status { + text-align: center; + font-size: 8rem; + padding-top: 60px; + color: var(--text-shade-1); +} +.description { + text-align: center; + font-size: 1.7rem; + margin-top: -10px; + color: var(--text-shade-1); +} +.shocked-bandwidth { + display: block; + margin-left: auto; + margin-right: auto; + margin-top: 70px; + margin-bottom: -120px; +} +@media screen and (max-width: 900px) { + .shocked-bandwidth { + margin-bottom: -100px; + } +} \ No newline at end of file diff --git a/public/assets/css/account.css b/public/assets/css/account.css index bbed44e..fb6d515 100644 --- a/public/assets/css/account.css +++ b/public/assets/css/account.css @@ -126,6 +126,10 @@ color: var(--text-shade-1); } +.account-sidebar .buttons #account-delete { + background-color: #F44336; +} + /* Settings */ .settings-wrapper { display: grid; diff --git a/public/assets/css/blogpost.css b/public/assets/css/blogpost.css index 7357fd9..2d61ba8 100644 --- a/public/assets/css/blogpost.css +++ b/public/assets/css/blogpost.css @@ -196,6 +196,17 @@ header { margin-bottom: 30px; } +@media screen and (min-width: 901px) { + .blog-card h1, + .blog-card h2, + .blog-card h3, + .blog-card h4, + .blog-card h5, + .blog-card h6 { + scroll-margin-top: 110px; + } +} + @media screen and (max-width: 800px) { .blog-card { padding: 40px; diff --git a/public/assets/css/forgot-password.css b/public/assets/css/forgot-password.css index 1a0572a..0432025 100644 --- a/public/assets/css/forgot-password.css +++ b/public/assets/css/forgot-password.css @@ -100,6 +100,9 @@ form.account a.register { .banner-notice.success div { background: var(--green-shade-0); } +.banner-notice.error div { + background: var(--red-shade-1); +} form.account.register { display: grid; @@ -108,7 +111,7 @@ form.account.register { column-gap: 24px; margin-bottom: 48px; } -form.account.register div.h-captcha { +form.account.forgot-password div.h-captcha { grid-column: 1 / span 2; display: flex; justify-content: center; diff --git a/public/assets/css/main.css b/public/assets/css/main.css index 07ace10..2a3d7e5 100644 --- a/public/assets/css/main.css +++ b/public/assets/css/main.css @@ -463,7 +463,7 @@ section.team-helpers .text { } section.team-helpers .team-helpers-cards { display: inline-grid; - grid-template-columns: repeat(12, 1fr); + grid-template-columns: repeat(21, 1fr); grid-gap: 20px; margin-right: 20px; color: var(--text-shade-1); diff --git a/public/assets/css/partials/header.css b/public/assets/css/partials/header.css index fbdc397..0bde5f0 100644 --- a/public/assets/css/partials/header.css +++ b/public/assets/css/partials/header.css @@ -371,6 +371,7 @@ header .user-widget .button { width: 100%; padding: 8px 60px; cursor: pointer; + word-break: keep-all; } header .user-widget .button.logout { background: var(--bg-shade-3); diff --git a/public/assets/images/_README.md b/public/assets/images/_README.md new file mode 100644 index 0000000..3b876a5 --- /dev/null +++ b/public/assets/images/_README.md @@ -0,0 +1,24 @@ +# How to optimise images + +WebP is the best format to use for most images, as it provides a good compression over PNG and JPEG. It is supported by all modern browsers (https://caniuse.com/webp) and is the recommended format for images on the web. + +## Using imagemagick (Recommended) + +This is the recommended method to convert images to WebP as it is faster and can be done in bulk. + +Install imagemagick from: https://imagemagick.org/script/download.php + +In the folder you would like to convert images, use the appropriate command: + +```bash +mogrify -format webp *.png +mogrify -format webp *.jpg +``` + +## Using a web service + +If you don't want to install imagemagick, you can use towebp.io to convert images to WebP. + +Go to https://towebp.io/ and upload your images. You can convert multiple images at once. + +To match the default quality of imagemagick, use a quality of 90 (imagemagick uses 92 by default). diff --git a/public/assets/images/blogposts/10-30-22.webp b/public/assets/images/blogposts/10-30-22.webp new file mode 100644 index 0000000..1652899 Binary files /dev/null and b/public/assets/images/blogposts/10-30-22.webp differ diff --git a/public/assets/images/blogposts/11-1-24.png b/public/assets/images/blogposts/11-1-24.png new file mode 100644 index 0000000..ce1d48c Binary files /dev/null and b/public/assets/images/blogposts/11-1-24.png differ diff --git a/public/assets/images/blogposts/11-1-24.webp b/public/assets/images/blogposts/11-1-24.webp new file mode 100644 index 0000000..9e1708c Binary files /dev/null and b/public/assets/images/blogposts/11-1-24.webp differ diff --git a/public/assets/images/blogposts/11-14-21.webp b/public/assets/images/blogposts/11-14-21.webp new file mode 100644 index 0000000..101b4a8 Binary files /dev/null and b/public/assets/images/blogposts/11-14-21.webp differ diff --git a/public/assets/images/blogposts/12-23-23.webp b/public/assets/images/blogposts/12-23-23.webp new file mode 100644 index 0000000..288eb64 Binary files /dev/null and b/public/assets/images/blogposts/12-23-23.webp differ diff --git a/public/assets/images/blogposts/4-8-24.webp b/public/assets/images/blogposts/4-8-24.webp new file mode 100644 index 0000000..9f49fc5 Binary files /dev/null and b/public/assets/images/blogposts/4-8-24.webp differ diff --git a/public/assets/images/blogposts/5-19-24.png b/public/assets/images/blogposts/5-19-24.png new file mode 100644 index 0000000..cdf0439 Binary files /dev/null and b/public/assets/images/blogposts/5-19-24.png differ diff --git a/public/assets/images/blogposts/5-19-24.webp b/public/assets/images/blogposts/5-19-24.webp new file mode 100644 index 0000000..f7530bf Binary files /dev/null and b/public/assets/images/blogposts/5-19-24.webp differ diff --git a/public/assets/images/blogposts/6-2-25.jpg b/public/assets/images/blogposts/6-2-25.jpg new file mode 100644 index 0000000..cfb4f17 Binary files /dev/null and b/public/assets/images/blogposts/6-2-25.jpg differ diff --git a/public/assets/images/blogposts/9-26-21.webp b/public/assets/images/blogposts/9-26-21.webp new file mode 100644 index 0000000..6da1546 Binary files /dev/null and b/public/assets/images/blogposts/9-26-21.webp differ diff --git a/public/assets/images/blogposts/9-29-21.webp b/public/assets/images/blogposts/9-29-21.webp new file mode 100644 index 0000000..7e8727f Binary files /dev/null and b/public/assets/images/blogposts/9-29-21.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/acnl-1.png b/public/assets/images/blogposts/august-2-2024/acnl-1.png new file mode 100644 index 0000000..8460e72 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/acnl-1.png differ diff --git a/public/assets/images/blogposts/august-2-2024/acnl-1.webp b/public/assets/images/blogposts/august-2-2024/acnl-1.webp new file mode 100644 index 0000000..d2bc69e Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/acnl-1.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/acnl-2.png b/public/assets/images/blogposts/august-2-2024/acnl-2.png new file mode 100644 index 0000000..73ec07b Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/acnl-2.png differ diff --git a/public/assets/images/blogposts/august-2-2024/acnl-2.webp b/public/assets/images/blogposts/august-2-2024/acnl-2.webp new file mode 100644 index 0000000..addfde0 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/acnl-2.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/acnl-site.png b/public/assets/images/blogposts/august-2-2024/acnl-site.png new file mode 100644 index 0000000..309617e Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/acnl-site.png differ diff --git a/public/assets/images/blogposts/august-2-2024/acnl-site.webp b/public/assets/images/blogposts/august-2-2024/acnl-site.webp new file mode 100644 index 0000000..1d03686 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/acnl-site.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/game-and-wario-1.png b/public/assets/images/blogposts/august-2-2024/game-and-wario-1.png new file mode 100644 index 0000000..8f11545 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/game-and-wario-1.png differ diff --git a/public/assets/images/blogposts/august-2-2024/game-and-wario-1.webp b/public/assets/images/blogposts/august-2-2024/game-and-wario-1.webp new file mode 100644 index 0000000..c638834 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/game-and-wario-1.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/game-and-wario-2.png b/public/assets/images/blogposts/august-2-2024/game-and-wario-2.png new file mode 100644 index 0000000..d10a04f Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/game-and-wario-2.png differ diff --git a/public/assets/images/blogposts/august-2-2024/game-and-wario-2.webp b/public/assets/images/blogposts/august-2-2024/game-and-wario-2.webp new file mode 100644 index 0000000..ae5f1ec Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/game-and-wario-2.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/miiverse-side-by-side.mp4 b/public/assets/images/blogposts/august-2-2024/miiverse-side-by-side.mp4 new file mode 100644 index 0000000..3818a64 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/miiverse-side-by-side.mp4 differ diff --git a/public/assets/images/blogposts/august-2-2024/minecraft.png b/public/assets/images/blogposts/august-2-2024/minecraft.png new file mode 100644 index 0000000..d397e9f Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/minecraft.png differ diff --git a/public/assets/images/blogposts/august-2-2024/minecraft.webp b/public/assets/images/blogposts/august-2-2024/minecraft.webp new file mode 100644 index 0000000..49fa71e Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/minecraft.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/preview.png b/public/assets/images/blogposts/august-2-2024/preview.png new file mode 100644 index 0000000..73ec07b Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/preview.png differ diff --git a/public/assets/images/blogposts/august-2-2024/preview.webp b/public/assets/images/blogposts/august-2-2024/preview.webp new file mode 100644 index 0000000..addfde0 Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/preview.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/smash-3ds.png b/public/assets/images/blogposts/august-2-2024/smash-3ds.png new file mode 100644 index 0000000..a298e5a Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/smash-3ds.png differ diff --git a/public/assets/images/blogposts/august-2-2024/smash-3ds.webp b/public/assets/images/blogposts/august-2-2024/smash-3ds.webp new file mode 100644 index 0000000..f1a8a4d Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/smash-3ds.webp differ diff --git a/public/assets/images/blogposts/august-2-2024/wwp.png b/public/assets/images/blogposts/august-2-2024/wwp.png new file mode 100644 index 0000000..6d4347b Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/wwp.png differ diff --git a/public/assets/images/blogposts/august-2-2024/wwp.webp b/public/assets/images/blogposts/august-2-2024/wwp.webp new file mode 100644 index 0000000..be32b3a Binary files /dev/null and b/public/assets/images/blogposts/august-2-2024/wwp.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/dr-luigi-wiiu-match.png b/public/assets/images/blogposts/june-29-2024/dr-luigi-wiiu-match.png new file mode 100644 index 0000000..2e3a0be Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/dr-luigi-wiiu-match.png differ diff --git a/public/assets/images/blogposts/june-29-2024/dr-luigi-wiiu-match.webp b/public/assets/images/blogposts/june-29-2024/dr-luigi-wiiu-match.webp new file mode 100644 index 0000000..712f2d3 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/dr-luigi-wiiu-match.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.png b/public/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.png new file mode 100644 index 0000000..d0f3b56 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.png differ diff --git a/public/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.webp b/public/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.webp new file mode 100644 index 0000000..2bb6958 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/dr-mario-3ds-match.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/mayor-pretendo.png b/public/assets/images/blogposts/june-29-2024/mayor-pretendo.png new file mode 100644 index 0000000..8c47d5a Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/mayor-pretendo.png differ diff --git a/public/assets/images/blogposts/june-29-2024/mayor-pretendo.webp b/public/assets/images/blogposts/june-29-2024/mayor-pretendo.webp new file mode 100644 index 0000000..3b5933a Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/mayor-pretendo.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.png b/public/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.png new file mode 100644 index 0000000..fb76c60 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.png differ diff --git a/public/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.webp b/public/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.webp new file mode 100644 index 0000000..3f42c6c Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/minecraft-wiiu-minigame.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/pokemon-partner-found.png b/public/assets/images/blogposts/june-29-2024/pokemon-partner-found.png new file mode 100644 index 0000000..dbef73c Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/pokemon-partner-found.png differ diff --git a/public/assets/images/blogposts/june-29-2024/pokemon-partner-found.webp b/public/assets/images/blogposts/june-29-2024/pokemon-partner-found.webp new file mode 100644 index 0000000..d043352 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/pokemon-partner-found.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/pokemon-trade-complete.png b/public/assets/images/blogposts/june-29-2024/pokemon-trade-complete.png new file mode 100644 index 0000000..8681019 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/pokemon-trade-complete.png differ diff --git a/public/assets/images/blogposts/june-29-2024/pokemon-trade-complete.webp b/public/assets/images/blogposts/june-29-2024/pokemon-trade-complete.webp new file mode 100644 index 0000000..f0e6978 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/pokemon-trade-complete.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/preview.png b/public/assets/images/blogposts/june-29-2024/preview.png new file mode 100644 index 0000000..2e8df0f Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/preview.png differ diff --git a/public/assets/images/blogposts/june-29-2024/preview.webp b/public/assets/images/blogposts/june-29-2024/preview.webp new file mode 100644 index 0000000..e2a0e35 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/preview.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.png b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.png new file mode 100644 index 0000000..1c0c9ab Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.png differ diff --git a/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.webp b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.webp new file mode 100644 index 0000000..2017574 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-match.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.png b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.png new file mode 100644 index 0000000..79e2db0 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.png differ diff --git a/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.webp b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.webp new file mode 100644 index 0000000..360cf6b Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/puyo-puyo-wiiu-rankings.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/shutter-acnl.png b/public/assets/images/blogposts/june-29-2024/shutter-acnl.png new file mode 100644 index 0000000..29580a4 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/shutter-acnl.png differ diff --git a/public/assets/images/blogposts/june-29-2024/shutter-acnl.webp b/public/assets/images/blogposts/june-29-2024/shutter-acnl.webp new file mode 100644 index 0000000..cc11070 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/shutter-acnl.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/shutter-nex-go.png b/public/assets/images/blogposts/june-29-2024/shutter-nex-go.png new file mode 100644 index 0000000..04d8d1b Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/shutter-nex-go.png differ diff --git a/public/assets/images/blogposts/june-29-2024/shutter-nex-go.webp b/public/assets/images/blogposts/june-29-2024/shutter-nex-go.webp new file mode 100644 index 0000000..1ecde9d Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/shutter-nex-go.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/smash4-wiiu-match.png b/public/assets/images/blogposts/june-29-2024/smash4-wiiu-match.png new file mode 100644 index 0000000..13d38c9 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/smash4-wiiu-match.png differ diff --git a/public/assets/images/blogposts/june-29-2024/smash4-wiiu-match.webp b/public/assets/images/blogposts/june-29-2024/smash4-wiiu-match.webp new file mode 100644 index 0000000..00a3272 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/smash4-wiiu-match.webp differ diff --git a/public/assets/images/blogposts/june-29-2024/splatoon-match.png b/public/assets/images/blogposts/june-29-2024/splatoon-match.png new file mode 100644 index 0000000..0668dc7 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/splatoon-match.png differ diff --git a/public/assets/images/blogposts/june-29-2024/splatoon-match.webp b/public/assets/images/blogposts/june-29-2024/splatoon-match.webp new file mode 100644 index 0000000..c11fb91 Binary files /dev/null and b/public/assets/images/blogposts/june-29-2024/splatoon-match.webp differ diff --git a/public/assets/images/blogposts/notification-body.png b/public/assets/images/blogposts/notification-body.png new file mode 100644 index 0000000..1f816bd Binary files /dev/null and b/public/assets/images/blogposts/notification-body.png differ diff --git a/public/assets/images/blogposts/notification-body.webp b/public/assets/images/blogposts/notification-body.webp new file mode 100644 index 0000000..84b5141 Binary files /dev/null and b/public/assets/images/blogposts/notification-body.webp differ diff --git a/public/assets/images/blogposts/notification-list.png b/public/assets/images/blogposts/notification-list.png new file mode 100644 index 0000000..0e1f022 Binary files /dev/null and b/public/assets/images/blogposts/notification-list.png differ diff --git a/public/assets/images/blogposts/notification-list.webp b/public/assets/images/blogposts/notification-list.webp new file mode 100644 index 0000000..0c90bc7 Binary files /dev/null and b/public/assets/images/blogposts/notification-list.webp differ diff --git a/public/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.webp b/public/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.webp new file mode 100644 index 0000000..f2310dd Binary files /dev/null and b/public/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.webp differ diff --git a/public/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.webp b/public/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.webp new file mode 100644 index 0000000..b8b2ff1 Binary files /dev/null and b/public/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.webp differ diff --git a/public/assets/images/blogposts/spr.png b/public/assets/images/blogposts/spr.png new file mode 100644 index 0000000..3274f09 Binary files /dev/null and b/public/assets/images/blogposts/spr.png differ diff --git a/public/assets/images/blogposts/spr.webp b/public/assets/images/blogposts/spr.webp new file mode 100644 index 0000000..360bbc9 Binary files /dev/null and b/public/assets/images/blogposts/spr.webp differ diff --git a/public/assets/images/docs/errors/pc-3ds-1.webp b/public/assets/images/docs/errors/pc-3ds-1.webp new file mode 100644 index 0000000..ae21099 Binary files /dev/null and b/public/assets/images/docs/errors/pc-3ds-1.webp differ diff --git a/public/assets/images/docs/errors/pc-3ds-2.webp b/public/assets/images/docs/errors/pc-3ds-2.webp new file mode 100644 index 0000000..f033aaa Binary files /dev/null and b/public/assets/images/docs/errors/pc-3ds-2.webp differ diff --git a/public/assets/images/docs/errors/pc-3ds-3.webp b/public/assets/images/docs/errors/pc-3ds-3.webp new file mode 100644 index 0000000..595ce50 Binary files /dev/null and b/public/assets/images/docs/errors/pc-3ds-3.webp differ diff --git a/public/assets/images/docs/errors/pc-3ds-4.webp b/public/assets/images/docs/errors/pc-3ds-4.webp new file mode 100644 index 0000000..5437580 Binary files /dev/null and b/public/assets/images/docs/errors/pc-3ds-4.webp differ diff --git a/public/assets/images/docs/errors/pc-3ds-5.webp b/public/assets/images/docs/errors/pc-3ds-5.webp new file mode 100644 index 0000000..e2e09be Binary files /dev/null and b/public/assets/images/docs/errors/pc-3ds-5.webp differ diff --git a/public/assets/images/docs/errors/pc-3ds-6.webp b/public/assets/images/docs/errors/pc-3ds-6.webp new file mode 100644 index 0000000..050193c Binary files /dev/null and b/public/assets/images/docs/errors/pc-3ds-6.webp differ diff --git a/public/assets/images/docs/errors/pc-wiiu-1.webp b/public/assets/images/docs/errors/pc-wiiu-1.webp new file mode 100644 index 0000000..93dec83 Binary files /dev/null and b/public/assets/images/docs/errors/pc-wiiu-1.webp differ diff --git a/public/assets/images/docs/errors/pc-wiiu-2.webp b/public/assets/images/docs/errors/pc-wiiu-2.webp new file mode 100644 index 0000000..9af3e05 Binary files /dev/null and b/public/assets/images/docs/errors/pc-wiiu-2.webp differ diff --git a/public/assets/images/docs/errors/pc-wiiu-3.webp b/public/assets/images/docs/errors/pc-wiiu-3.webp new file mode 100644 index 0000000..cc74efe Binary files /dev/null and b/public/assets/images/docs/errors/pc-wiiu-3.webp differ diff --git a/public/assets/images/docs/errors/pc-wiiu-4.webp b/public/assets/images/docs/errors/pc-wiiu-4.webp new file mode 100644 index 0000000..daeb96d Binary files /dev/null and b/public/assets/images/docs/errors/pc-wiiu-4.webp differ diff --git a/public/assets/images/docs/errors/pc-wiiu-5.webp b/public/assets/images/docs/errors/pc-wiiu-5.webp new file mode 100644 index 0000000..69eac03 Binary files /dev/null and b/public/assets/images/docs/errors/pc-wiiu-5.webp differ diff --git a/public/assets/images/docs/install/3ds/releases-highlight.webp b/public/assets/images/docs/install/3ds/releases-highlight.webp new file mode 100644 index 0000000..ba9ea9d Binary files /dev/null and b/public/assets/images/docs/install/3ds/releases-highlight.webp differ diff --git a/public/assets/images/docs/install/3ds/zip-highlight.webp b/public/assets/images/docs/install/3ds/zip-highlight.webp new file mode 100644 index 0000000..2755847 Binary files /dev/null and b/public/assets/images/docs/install/3ds/zip-highlight.webp differ diff --git a/public/assets/images/docs/install/cemu/download-account-files.webp b/public/assets/images/docs/install/cemu/download-account-files.webp new file mode 100644 index 0000000..844ab1f Binary files /dev/null and b/public/assets/images/docs/install/cemu/download-account-files.webp differ diff --git a/public/assets/images/docs/install/cemu/network-services-settings.webp b/public/assets/images/docs/install/cemu/network-services-settings.webp new file mode 100644 index 0000000..bd653d3 Binary files /dev/null and b/public/assets/images/docs/install/cemu/network-services-settings.webp differ diff --git a/public/assets/images/docs/install/juxt/3ds-sd-card.webp b/public/assets/images/docs/install/juxt/3ds-sd-card.webp new file mode 100644 index 0000000..3394ea4 Binary files /dev/null and b/public/assets/images/docs/install/juxt/3ds-sd-card.webp differ diff --git a/public/assets/images/docs/install/juxt/martini-download.webp b/public/assets/images/docs/install/juxt/martini-download.webp new file mode 100644 index 0000000..f308d31 Binary files /dev/null and b/public/assets/images/docs/install/juxt/martini-download.webp differ diff --git a/public/assets/images/docs/install/juxt/martini-hbl.webp b/public/assets/images/docs/install/juxt/martini-hbl.webp new file mode 100644 index 0000000..064f0ad Binary files /dev/null and b/public/assets/images/docs/install/juxt/martini-hbl.webp differ diff --git a/public/assets/images/docs/install/juxt/martini-highlight.webp b/public/assets/images/docs/install/juxt/martini-highlight.webp new file mode 100644 index 0000000..ca3b7e7 Binary files /dev/null and b/public/assets/images/docs/install/juxt/martini-highlight.webp differ diff --git a/public/assets/images/docs/install/juxt/martini-install.webp b/public/assets/images/docs/install/juxt/martini-install.webp new file mode 100644 index 0000000..f28f805 Binary files /dev/null and b/public/assets/images/docs/install/juxt/martini-install.webp differ diff --git a/public/assets/images/docs/install/juxt/martini-sd-card.webp b/public/assets/images/docs/install/juxt/martini-sd-card.webp new file mode 100644 index 0000000..11d0ace Binary files /dev/null and b/public/assets/images/docs/install/juxt/martini-sd-card.webp differ diff --git a/public/assets/images/docs/install/juxt/martini-success.webp b/public/assets/images/docs/install/juxt/martini-success.webp new file mode 100644 index 0000000..d645c65 Binary files /dev/null and b/public/assets/images/docs/install/juxt/martini-success.webp differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-confirm.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-confirm.png new file mode 100644 index 0000000..b79e4f8 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-confirm.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-done.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-done.png new file mode 100644 index 0000000..7a3909a Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-done.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-icon.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-icon.png new file mode 100644 index 0000000..3e5ff76 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-icon.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-icon.webp b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-icon.webp new file mode 100644 index 0000000..d9c1fcc Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-icon.webp differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-inkay.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-inkay.png new file mode 100644 index 0000000..41ab552 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-inkay.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-p1.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-p1.png new file mode 100644 index 0000000..5109e0d Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-p1.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-p2.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-p2.png new file mode 100644 index 0000000..8caa538 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-p2.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/aroma-updater-welcome.png b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-welcome.png new file mode 100644 index 0000000..4a12100 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/aroma-updater-welcome.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/inkay-nightly-link.png b/public/assets/images/docs/install/wiiu/aroma/inkay-nightly-link.png deleted file mode 100644 index 5c8d888..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/inkay-nightly-link.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/pretendo-notification.png b/public/assets/images/docs/install/wiiu/aroma/pretendo-notification.png new file mode 100644 index 0000000..57cfbfb Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/pretendo-notification.png differ diff --git a/public/assets/images/docs/install/wiiu/aroma/pretendo-notification.webp b/public/assets/images/docs/install/wiiu/aroma/pretendo-notification.webp new file mode 100644 index 0000000..e5b0be4 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/aroma/pretendo-notification.webp differ diff --git a/public/assets/images/docs/install/wiiu/aroma/rce-sd-card.png b/public/assets/images/docs/install/wiiu/aroma/rce-sd-card.png deleted file mode 100644 index 6effca4..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/rce-sd-card.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/rce-wps-highlight.png b/public/assets/images/docs/install/wiiu/aroma/rce-wps-highlight.png deleted file mode 100644 index c37f3f6..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/rce-wps-highlight.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/releases-highlight.png b/public/assets/images/docs/install/wiiu/aroma/releases-highlight.png deleted file mode 100644 index 22afb15..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/releases-highlight.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/sd-card.png b/public/assets/images/docs/install/wiiu/aroma/sd-card.png deleted file mode 100644 index 8104483..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/sd-card.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/working-notification.jpg b/public/assets/images/docs/install/wiiu/aroma/working-notification.jpg deleted file mode 100644 index 5107ce0..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/working-notification.jpg and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/working-notification.png b/public/assets/images/docs/install/wiiu/aroma/working-notification.png deleted file mode 100644 index 2f7431e..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/working-notification.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/aroma/wps-highlight.png b/public/assets/images/docs/install/wiiu/aroma/wps-highlight.png deleted file mode 100644 index 5c75d7a..0000000 Binary files a/public/assets/images/docs/install/wiiu/aroma/wps-highlight.png and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/aroma-plugin-menu.png b/public/assets/images/docs/install/wiiu/inkay-tips/aroma-plugin-menu.png new file mode 100644 index 0000000..f80743a Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/aroma-plugin-menu.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/inkay-network-false.png b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-network-false.png new file mode 100644 index 0000000..f9dbf2e Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-network-false.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/inkay-network-selection.png b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-network-selection.png new file mode 100644 index 0000000..ccfea2f Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-network-selection.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/inkay-other-settings.png b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-other-settings.png new file mode 100644 index 0000000..dcae549 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-other-settings.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/inkay-wwp-apply.png b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-wwp-apply.png new file mode 100644 index 0000000..b3d5a16 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-wwp-apply.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/inkay-wwp-reset.png b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-wwp-reset.png new file mode 100644 index 0000000..7bd6b8a Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/inkay-wwp-reset.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/nintendo-notification.png b/public/assets/images/docs/install/wiiu/inkay-tips/nintendo-notification.png new file mode 100644 index 0000000..b5d2f41 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/nintendo-notification.png differ diff --git a/public/assets/images/docs/install/wiiu/inkay-tips/nintendo-notification.webp b/public/assets/images/docs/install/wiiu/inkay-tips/nintendo-notification.webp new file mode 100644 index 0000000..8006b5b Binary files /dev/null and b/public/assets/images/docs/install/wiiu/inkay-tips/nintendo-notification.webp differ diff --git a/public/assets/images/docs/install/wiiu/pnid/aroma-plugins-list.jpg b/public/assets/images/docs/install/wiiu/pnid/aroma-plugins-list.jpg deleted file mode 100644 index dc4b81f..0000000 Binary files a/public/assets/images/docs/install/wiiu/pnid/aroma-plugins-list.jpg and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/pnid/inkay-mainmenu.jpg b/public/assets/images/docs/install/wiiu/pnid/inkay-mainmenu.jpg deleted file mode 100644 index 909fa69..0000000 Binary files a/public/assets/images/docs/install/wiiu/pnid/inkay-mainmenu.jpg and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/pnid/inkay-patching.jpg b/public/assets/images/docs/install/wiiu/pnid/inkay-patching.jpg deleted file mode 100644 index 1906efc..0000000 Binary files a/public/assets/images/docs/install/wiiu/pnid/inkay-patching.jpg and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/pnid/nintendo-connection.jpg b/public/assets/images/docs/install/wiiu/pnid/nintendo-connection.jpg deleted file mode 100644 index 53a5afd..0000000 Binary files a/public/assets/images/docs/install/wiiu/pnid/nintendo-connection.jpg and /dev/null differ diff --git a/public/assets/images/docs/install/wiiu/pnid/pretendo-eula.webp b/public/assets/images/docs/install/wiiu/pnid/pretendo-eula.webp new file mode 100644 index 0000000..3ea3965 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/pnid/pretendo-eula.webp differ diff --git a/public/assets/images/docs/install/wiiu/pnid/register-account-web.webp b/public/assets/images/docs/install/wiiu/pnid/register-account-web.webp new file mode 100644 index 0000000..c181d64 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/pnid/register-account-web.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-appstore.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-appstore.webp new file mode 100644 index 0000000..1d8ead8 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-appstore.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-backup.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-backup.webp new file mode 100644 index 0000000..566284c Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-backup.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-confirmation.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-confirmation.webp new file mode 100644 index 0000000..07ee7ad Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-confirmation.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-gameoptions.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-gameoptions.webp new file mode 100644 index 0000000..feb8dc5 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-gameoptions.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-gameslist.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-gameslist.webp new file mode 100644 index 0000000..897a6f1 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-gameslist.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-icon.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-icon.webp new file mode 100644 index 0000000..cb48b4c Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-icon.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-mainmenu.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-mainmenu.webp new file mode 100644 index 0000000..5eaec40 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-mainmenu.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-saveworkingonpretendo.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-saveworkingonpretendo.webp new file mode 100644 index 0000000..24c87f4 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-saveworkingonpretendo.webp differ diff --git a/public/assets/images/docs/install/wiiu/savedatabackup/savemii-transfer.webp b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-transfer.webp new file mode 100644 index 0000000..26fecb4 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/savedatabackup/savemii-transfer.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-change.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-change.png new file mode 100644 index 0000000..4e0216d Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-change.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-change.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-change.webp new file mode 100644 index 0000000..3f9bfe7 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-change.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-button.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-button.png new file mode 100644 index 0000000..a643ce1 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-button.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-button.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-button.webp new file mode 100644 index 0000000..f85f97b Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-button.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-done.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-done.png new file mode 100644 index 0000000..416400c Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-done.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-done.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-done.webp new file mode 100644 index 0000000..75661a4 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-done.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-editor.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-editor.png new file mode 100644 index 0000000..7177b7d Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-editor.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-editor.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-editor.webp new file mode 100644 index 0000000..c17f419 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-editor.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-obtain.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-obtain.png new file mode 100644 index 0000000..757d821 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-obtain.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-obtain.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-obtain.webp new file mode 100644 index 0000000..9f58a19 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-obtain.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-primary.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-primary.png new file mode 100644 index 0000000..59a39aa Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-primary.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-primary.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-primary.webp new file mode 100644 index 0000000..c2fb2aa Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-primary.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-secondary.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-secondary.png new file mode 100644 index 0000000..cdfc5d7 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-secondary.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-secondary.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-secondary.webp new file mode 100644 index 0000000..ee2c6bb Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-dns-secondary.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-list.png b/public/assets/images/docs/install/wiiu/sssl/internet-connection-list.png new file mode 100644 index 0000000..a5576e3 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-list.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-connection-list.webp b/public/assets/images/docs/install/wiiu/sssl/internet-connection-list.webp new file mode 100644 index 0000000..d380612 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-connection-list.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-settings-connect.png b/public/assets/images/docs/install/wiiu/sssl/internet-settings-connect.png new file mode 100644 index 0000000..7e12ef4 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-settings-connect.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-settings-connect.webp b/public/assets/images/docs/install/wiiu/sssl/internet-settings-connect.webp new file mode 100644 index 0000000..9752dce Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-settings-connect.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-settings-scan.png b/public/assets/images/docs/install/wiiu/sssl/internet-settings-scan.png new file mode 100644 index 0000000..d25d1a2 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-settings-scan.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-settings-scan.webp b/public/assets/images/docs/install/wiiu/sssl/internet-settings-scan.webp new file mode 100644 index 0000000..ddf2c4c Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-settings-scan.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-settings.png b/public/assets/images/docs/install/wiiu/sssl/internet-settings.png new file mode 100644 index 0000000..38fe170 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-settings.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/internet-settings.webp b/public/assets/images/docs/install/wiiu/sssl/internet-settings.webp new file mode 100644 index 0000000..effdba2 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/internet-settings.webp differ diff --git a/public/assets/images/docs/install/wiiu/sssl/system-settings.png b/public/assets/images/docs/install/wiiu/sssl/system-settings.png new file mode 100644 index 0000000..4fd4e1a Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/system-settings.png differ diff --git a/public/assets/images/docs/install/wiiu/sssl/system-settings.webp b/public/assets/images/docs/install/wiiu/sssl/system-settings.webp new file mode 100644 index 0000000..5cb1bd8 Binary files /dev/null and b/public/assets/images/docs/install/wiiu/sssl/system-settings.webp differ diff --git a/public/assets/images/shockedbandwidth.svg b/public/assets/images/shockedbandwidth.svg new file mode 100644 index 0000000..702169c --- /dev/null +++ b/public/assets/images/shockedbandwidth.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/js/account.js b/public/assets/js/account.js index 6c8e360..b2736bb 100644 --- a/public/assets/js/account.js +++ b/public/assets/js/account.js @@ -2,12 +2,16 @@ const updateServerEnvironmentForm = document.querySelector('form.server-selectio const serverSelectionSaveButton = document.querySelector('#save-server-selection'); const editSettingsModal = document.querySelector('.modal-wrapper#edit-settings'); const editSettingsModalButtonClose = document.getElementById('editSettingsCloseButton'); +const deleteAccountButton = document.getElementById('account-delete'); +const deletePNIDConfirmModal = document.querySelector('.modal-wrapper#confirm-delete'); +const deletePNIDConfirmModalButtonConfirm = document.getElementById('confirmDeleteConfirmButton'); +const deletePNIDConfirmModalButtonClose = document.getElementById('confirmDeleteCloseButton'); editSettingsModalButtonClose?.addEventListener('click', () => { editSettingsModal.classList.add('hidden'); }); -document.addEventListener('click', event => { +document.addEventListener('click', (event) => { if (event.target.classList.contains('edit')) { event.preventDefault(); @@ -15,7 +19,7 @@ document.addEventListener('click', event => { } }); -serverSelectionSaveButton.addEventListener('click', event => { +serverSelectionSaveButton.addEventListener('click', (event) => { event.preventDefault(); const checkedInput = updateServerEnvironmentForm.querySelector('input:checked'); @@ -35,7 +39,7 @@ serverSelectionSaveButton.addEventListener('click', event => { }) }) .then(response => response.json()) - .then(json => { + .then((json) => { if (!json.error) { // TODO - Make this prettier alert('Saved server environment'); @@ -44,7 +48,7 @@ serverSelectionSaveButton.addEventListener('click', event => { alert('Failed to server environment'); } }) - .catch(error => { + .catch((error) => { console.log(error); // TODO - Make this prettier alert('Failed to server environment'); @@ -53,3 +57,20 @@ serverSelectionSaveButton.addEventListener('click', event => { alert(error); } }); + +deleteAccountButton.addEventListener('click', (event) => { + event.preventDefault(); + deletePNIDConfirmModal.classList.remove('hidden'); +}); + +deletePNIDConfirmModalButtonConfirm?.addEventListener('click', async () => { + await fetch('/account/delete', { + method: 'POST' + }); + + deletePNIDConfirmModal.classList.add('hidden'); +}); + +deletePNIDConfirmModalButtonClose?.addEventListener('click', () => { + deletePNIDConfirmModal.classList.add('hidden'); +}); diff --git a/public/assets/js/docssidebarhandler.js b/public/assets/js/docssidebarhandler.js index b602fc4..f6b565d 100644 --- a/public/assets/js/docssidebarhandler.js +++ b/public/assets/js/docssidebarhandler.js @@ -1,6 +1,6 @@ const openSidebarBtn = document.querySelector('#openSidebar'); const content = document.querySelector('div.content'); -openSidebarBtn.addEventListener('click', function() { +openSidebarBtn.addEventListener('click', function () { const sidebar = document.querySelector('.sidebar'); sidebar.classList.toggle('open'); content.classList.toggle('open-sidebar'); diff --git a/public/assets/js/forgot-password.js b/public/assets/js/forgot-password.js deleted file mode 100644 index 006177c..0000000 --- a/public/assets/js/forgot-password.js +++ /dev/null @@ -1,24 +0,0 @@ -const input = document.querySelector('#input'); -document.querySelector('form').addEventListener('submit', function (event) { - event.preventDefault(); - - fetch('/account/forgot-password', { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - input: input.value - }) - }) - .then(response => response.json()) - .then(body => { - if (body.error) { - alert(`Error: ${body.error}. TODO: red error message thing`); - } else { - alert('If an account exists with the provided username/email address an email has been sent. TODO: reword this and green success'); - } - }) - .catch(console.log); -}); diff --git a/public/assets/js/header-handler.js b/public/assets/js/header-handler.js index 5bccda6..1a95192 100644 --- a/public/assets/js/header-handler.js +++ b/public/assets/js/header-handler.js @@ -1,5 +1,3 @@ -/* eslint-disable no-undef, no-unused-vars */ - const header = document.querySelector('header'); const dropdownButtonWrapper = document.querySelector('.dropdown-button-wrapper'); const dropdown = document.querySelector('header div.dropdown'); @@ -68,10 +66,9 @@ dropdownAnchors.forEach((a) => { }); }); - // make the header background transparent if near the top of the page function makeHeaderBackgroundTransparent() { - if(window.pageYOffset < 100) { + if (window.pageYOffset < 100) { header.classList.add('transparent'); } else { header.classList.remove('transparent'); @@ -83,7 +80,7 @@ window.addEventListener('scroll', () => { }); desktopDropdownBtns.forEach((btn) => { - [ 'click', 'mouseover' ].forEach((event) => { + ['click', 'mouseover'].forEach((event) => { btn.addEventListener(event, () => { const id = btn.id.replace('-button', ''); navbarDropdownHandler(id); @@ -114,7 +111,7 @@ dropdown.addEventListener('mouseleave', (e) => { }); // Account widget handler -const userWidgetToggle = document.querySelector('.user-widget-toggle') ; +const userWidgetToggle = document.querySelector('.user-widget-toggle'); const userWidget = document.querySelector('.user-widget'); // Open widget on click, close locale dropdown @@ -159,7 +156,7 @@ localeOptionsList.forEach((option) => { // close all dropdowns on scroll document.addEventListener('scroll', () => { - localeDropdownOptions.forEach((el) => el.classList.remove('active')); + localeDropdownOptions.forEach(el => el.classList.remove('active')); localeDropdownToggle.classList.remove('active'); userWidget?.classList.remove('active'); @@ -180,16 +177,18 @@ document.addEventListener('click', (e) => { if ( userWidget == targetElement || - userWidget?.contains(targetElement) || - userWidgetToggle == targetElement || - userWidgetToggle?.contains(targetElement) + userWidget?.contains(targetElement) || + userWidgetToggle == targetElement || + userWidgetToggle?.contains(targetElement) ) { found = true; localeDropdownToggle.classList.remove('active'); localeOptionsContainer.classList.remove('active'); } - if (found) return; + if (found) { + return; + } // click outside of dropdowns userWidget?.classList.remove('active'); diff --git a/public/assets/js/miieditor.js b/public/assets/js/miieditor.js index d44c7c8..ca7c80b 100644 --- a/public/assets/js/miieditor.js +++ b/public/assets/js/miieditor.js @@ -62,12 +62,12 @@ function initializeMiiData(encodedUserMiiData) { console.log('grabbing rendered miis for later use'); const miiStudioNeutralUrl = mii.studioUrl({ width: 512, - bgColor: '13173300', + bgColor: '13173300' }); const miiStudioSorrowUrl = mii.studioUrl({ width: 512, bgColor: '13173300', - expression: 'sorrow', + expression: 'sorrow' }); document.querySelector('.mii-comparison img.old-mii').src = miiStudioNeutralUrl; document.querySelector('.mii-comparison.confirmed img.old-mii').src = miiStudioSorrowUrl; @@ -86,8 +86,9 @@ document.querySelector('script#encodedUserMiiData').remove(); const validMiiData = initializeMiiData(encodedUserMiiData); if (!validMiiData) { const shouldContinue = window.confirm('Found corrupted mii data, want to continue with a new Mii?'); - if (!shouldContinue) + if (!shouldContinue) { window.location.assign('/account'); + } initializeMiiData(newMiiData); } @@ -118,12 +119,12 @@ function renderMii(heightOverride, buildOverride) { baldMiiFaceImg.src = baldMii.studioUrl({ width: 512, bgColor: '13173300', - type: 'face_only', + type: 'face_only' }); miiFaceImg.src = mii.studioUrl({ width: 512, bgColor: '13173300', - type: 'face_only', + type: 'face_only' }); miiBodyImg.src = mii.studioAssetUrlBody(); } @@ -174,7 +175,7 @@ function renderMii(heightOverride, buildOverride) { if (!heightOverride && !buildOverride) { const faceMiiStudioUrl = mii.studioUrl({ width: 512, - bgColor: '13173300', + bgColor: '13173300' }); const faceMiiStudioSmileUrl = mii.studioUrl({ @@ -236,7 +237,9 @@ function handleCalendar(e) { } function preventEmpty(e) { - if (e.target.value !== '') return; + if (e.target.value !== '') { + return; + } e.target.value = e.target.defaultValue; } @@ -280,7 +283,7 @@ document 'mustacheType', 'moleEnabled', 'gender', - 'favoriteColor', + 'favoriteColor' ].forEach((prop) => { const el = document.querySelector(`#${prop}${mii[prop]}`); if (el) { @@ -326,7 +329,7 @@ console.log('[info] preselected value for disableSharing'); 'height', 'build', 'miiName', - 'creatorName', + 'creatorName' ].forEach((prop) => { document.querySelector(`#${prop}`).value = mii[prop]; document.querySelector(`#${prop}`).defaultValue = mii[prop]; @@ -390,10 +393,10 @@ function openTab(e, tabType) { // Here we bind all of the functions to the corresponding buttons document.querySelectorAll('.tabs button.tabbtn').forEach((el) => { - el.addEventListener('click', (e) => openTab(e, 'tab')); + el.addEventListener('click', e => openTab(e, 'tab')); }); document.querySelectorAll('.subtabs button.subtabbtn').forEach((el) => { - el.addEventListener('click', (e) => openTab(e, 'subtab')); + el.addEventListener('click', e => openTab(e, 'subtab')); }); // SUBPAGES @@ -487,10 +490,10 @@ document mii: { name: mii.miiName, primary: 'Y', - data: miiData, + data: miiData } }) - }) .then(({ status }) => { + }).then(({ status }) => { // TODO - Make this prettier alert('Mii has been updated. It may take some time for the cached image on the website to update'); diff --git a/public/assets/js/progress-charts.js b/public/assets/js/progress-charts.js index 6313d34..1bc8733 100644 --- a/public/assets/js/progress-charts.js +++ b/public/assets/js/progress-charts.js @@ -1,6 +1,6 @@ -/* eslint-disable no-undef */ -document.querySelectorAll('.feature-list-wrapper').forEach(progressListElement => { +/* global Chart -- chart.js */ +document.querySelectorAll('.feature-list-wrapper').forEach((progressListElement) => { // Find and generate all relevant data const percentageOverride = progressListElement.querySelector('canvas.percentage-chart').dataset.percentageoverride; const allFeatureNodes = progressListElement.querySelectorAll('.feature'); @@ -12,7 +12,7 @@ document.querySelectorAll('.feature-list-wrapper').forEach(progressListElement = const remainingPercentage = 100 - progressPercentage; // Set inner paragraph - progressListElement.querySelectorAll('.percentage-label').forEach(p => { + progressListElement.querySelectorAll('.percentage-label').forEach((p) => { if (progressPercentage === 0) { p.innerText = progressPercentage.toString() + '%'; } else { diff --git a/public/assets/js/reset-password.js b/public/assets/js/reset-password.js index 5b58f4f..f36cf6f 100644 --- a/public/assets/js/reset-password.js +++ b/public/assets/js/reset-password.js @@ -9,7 +9,7 @@ document.querySelector('form').addEventListener('submit', function (event) { method: 'POST', headers: { 'Accept': 'application/json', - 'Content-Type': 'application/json', + 'Content-Type': 'application/json' }, body: JSON.stringify({ password: passwordInput.value, @@ -18,7 +18,7 @@ document.querySelector('form').addEventListener('submit', function (event) { }) }) .then(response => response.json()) - .then(body => { + .then((body) => { if (body.error) { alert(`Error: ${body.error}. TODO: red error message thing`); } else { diff --git a/public/assets/js/upgrade.js b/public/assets/js/upgrade.js index 104acbb..7e19175 100644 --- a/public/assets/js/upgrade.js +++ b/public/assets/js/upgrade.js @@ -3,13 +3,13 @@ const buttons = { unsubModal: { show: document.getElementById('unsubModalShowButton'), close: document.getElementById('unsubModalCloseButton'), - confirm: document.getElementById('unsubModalConfirmButton'), + confirm: document.getElementById('unsubModalConfirmButton') }, switchTierModal: { show: document.getElementById('switchTierShowButton'), close: document.getElementById('switchTierCloseButton'), - confirm: document.getElementById('switchTierConfirmButton'), - }, + confirm: document.getElementById('switchTierConfirmButton') + } }; const currentTierID = document.querySelector('form').dataset.currentTier || undefined; @@ -52,7 +52,7 @@ if (currentTierElement) { } // If a tier is selected, conditionally enable the submit button. -document.querySelector('form').addEventListener('change', function(e) { +document.querySelector('form').addEventListener('change', function (e) { e.preventDefault(); // If the selected tier is the current tier, set the button to disabled. Else we enable the button @@ -60,7 +60,7 @@ document.querySelector('form').addEventListener('change', function(e) { }); // handle the submit button -buttons.submit.addEventListener('click', function(e) { +buttons.submit.addEventListener('click', function (e) { e.preventDefault(); // If the user is already subscribed to another tier, we show the confirm modal, else if this is a new subscription we submit the form. @@ -77,7 +77,7 @@ buttons.submit.addEventListener('click', function(e) { } }); -buttons.unsubModal.show.addEventListener('click', function(e) { +buttons.unsubModal.show.addEventListener('click', function (e) { e.preventDefault(); const tierNameSpan = document.querySelector('#unsub .modal-caption span'); @@ -87,27 +87,27 @@ buttons.unsubModal.show.addEventListener('click', function(e) { document.body.classList.add('modal-open'); document.querySelector('.modal-wrapper#unsub').classList.remove('hidden'); }); -buttons.unsubModal.close.addEventListener('click', function(e) { +buttons.unsubModal.close.addEventListener('click', function (e) { e.preventDefault(); // Hide the unsubscribe modal document.body.classList.remove('modal-open'); document.querySelector('.modal-wrapper#unsub').classList.add('hidden'); }); -buttons.unsubModal.confirm.addEventListener('click', function(e) { +buttons.unsubModal.confirm.addEventListener('click', function (e) { e.preventDefault(); submitForm(true); }); -buttons.switchTierModal.close.addEventListener('click', function(e) { +buttons.switchTierModal.close.addEventListener('click', function (e) { e.preventDefault(); // Hide the switch tier modal document.body.classList.remove('modal-open'); document.querySelector('.modal-wrapper#switchtier').classList.add('hidden'); }); -buttons.switchTierModal.confirm.addEventListener('click', function(e) { +buttons.switchTierModal.confirm.addEventListener('click', function (e) { e.preventDefault(); submitForm(false); diff --git a/src/cache.js b/src/cache.js index 68f8838..af17544 100644 --- a/src/cache.js +++ b/src/cache.js @@ -1,11 +1,11 @@ const { GraphQLClient, gql } = require('graphql-request'); const Stripe = require('stripe'); +const config = require('./config'); const logger = require('./logger'); -const config = require('../config.json'); const github = new GraphQLClient('https://api.github.com/graphql', { headers: { - Authorization: `bearer ${config.github.graphql_token}`, + Authorization: `bearer ${config.github.graphql_token}` } }); @@ -82,7 +82,7 @@ let stripeDonationCache = { sections: [] }; -async function getGitHubProjectsV2(after='') { +async function getGitHubProjectsV2(after = '') { let projects = []; const data = await github.request(getProjectsV2GQL, { @@ -94,7 +94,7 @@ async function getGitHubProjectsV2(after='') { projects.push({ id: node.id, title: node.title, - url: node.repositories.nodes[0]?.url, + url: node.repositories.nodes[0]?.url }); } @@ -108,7 +108,7 @@ async function getGitHubProjectsV2(after='') { return projects; } -async function getGitHubProjectsV2Fields(id, after='') { +async function getGitHubProjectsV2Fields(id, after = '') { let fields = []; const data = await github.request(getProjectsV2FieldsGQL, { diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..98a8e5d --- /dev/null +++ b/src/config.js @@ -0,0 +1,61 @@ +const jsonConfig = require('../config.json'); + +const disableEmail = !jsonConfig.email?.from?.trim() || !jsonConfig.email?.ses?.region?.trim() || !jsonConfig.email?.ses?.key?.trim() || !jsonConfig.email?.ses?.secret?.trim(); + +const email = disableEmail + ? false + : { + from: jsonConfig.email.from, + ses: { + region: jsonConfig.email.ses.region, + key: jsonConfig.email.ses.key, + secret: jsonConfig.email.ses.secret + } + }; + +module.exports = { + api_base: jsonConfig.api_base, + http: { + base_url: jsonConfig.http.base_url, + port: jsonConfig.http.port, + allowed_redirection_suffixes: Array.isArray(jsonConfig.http.allowed_redirection_suffixes) ? jsonConfig.http.allowed_redirection_suffixes : ['pretendo.network'] + }, + github: { + graphql_token: jsonConfig.github.graphql_token + }, + stripe: { + secret_key: jsonConfig.stripe.secret_key, + webhook_secret: jsonConfig.stripe.webhook_secret, + goal_cents: jsonConfig.stripe.goal_cents, + notification_emails: jsonConfig.stripe.notification_emails + }, + database: { + account: { + connection_string: jsonConfig.database.account.connection_string, + options: jsonConfig.database.account.options + } + }, + discord: { + bot_token: jsonConfig.discord.bot_token, + client_id: jsonConfig.discord.client_id, + client_secret: jsonConfig.discord.client_secret, + guild_id: jsonConfig.discord.guild_id, + roles: { + supporter: jsonConfig.discord.roles.supporter, + tester: jsonConfig.discord.roles.tester + } + }, + discourse: { + sso: { + secret: jsonConfig.discourse.sso.secret + } + }, + email, + grpc: { + api: { + host: jsonConfig.grpc.api.host, + port: jsonConfig.grpc.api.port, + api_key: jsonConfig.grpc.api.api_key + } + } +}; diff --git a/src/database.js b/src/database.js index 751b649..4a1e926 100644 --- a/src/database.js +++ b/src/database.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); +const config = require('./config'); const PNIDSchema = require('./schema/pnid'); -const config = require('../config.json'); const accountServerConfig = config.database.account; const { connection_string, options } = accountServerConfig; diff --git a/src/mailer.js b/src/mailer.js index 39c0e8e..88e5fa0 100644 --- a/src/mailer.js +++ b/src/mailer.js @@ -1,15 +1,10 @@ const nodemailer = require('nodemailer'); const aws = require('@aws-sdk/client-ses'); -const config = require('../config.json'); +const config = require('./config'); -let disableEmail = false; let transporter; -if (!config.email?.from?.trim() || !config.email?.ses?.region?.trim() || !config.email?.ses?.key?.trim() || !config.email?.ses?.secret?.trim()) { - disableEmail = true; -} - -if (!disableEmail) { +if (config.email) { const ses = new aws.SES({ apiVersion: '2010-12-01', region: config.email.ses.region, diff --git a/src/middleware/redirect.js b/src/middleware/redirect.js index d1e5d38..54fa60a 100644 --- a/src/middleware/redirect.js +++ b/src/middleware/redirect.js @@ -1,14 +1,35 @@ +const config = require('../config'); + +function isValidRedirect(redirect) { + if (!redirect) { + return false; + } + if (redirect.startsWith('/')) { + return true; + } + if (redirect.startsWith('http://') || redirect.startsWith('https://')) { + try { + const url = new URL(redirect); + return config.http.allowed_redirection_suffixes.some(domain => url.hostname.endsWith(domain)); + } catch { + return false; + } + } + + return false; +} + async function redirectMiddleware(request, response, next) { if (request.path.startsWith('/account/logout')) { return next(); } - - if (request.method === 'POST') { - request.redirect = request.body.redirect?.startsWith('/') ? request.body.redirect : null; + + if (request.method === 'POST' && request.body) { + request.redirect = isValidRedirect(request.body.redirect) ? request.body.redirect : null; } if (request.query.redirect) { - response.locals.redirect = request.query.redirect?.startsWith('/') ? request.query.redirect : null; + response.locals.redirect = isValidRedirect(request.query.redirect) ? request.query.redirect : null; } return next(); diff --git a/src/middleware/render-data.js b/src/middleware/render-data.js index 95a916e..94c62df 100644 --- a/src/middleware/render-data.js +++ b/src/middleware/render-data.js @@ -1,6 +1,6 @@ +const fs = require('fs'); const util = require('../util'); const database = require('../database'); -const fs = require('fs'); const localeFileNames = fs.readdirSync(`${__dirname}/../../locales`); async function renderDataMiddleware(request, response, next) { @@ -16,7 +16,7 @@ async function renderDataMiddleware(request, response, next) { const reqLocale = request.cookies.preferredLocale || request.locale.toString(); const locale = util.getLocale(reqLocale); - let localeList = localeFileNames.map(locale => { + let localeList = localeFileNames.map((locale) => { const code = locale.replace('.json', '').replace('_', '-'); // Check if it's a real language code, or a custom one @@ -92,6 +92,11 @@ async function renderDataMiddleware(request, response, next) { request.pnid = await database.PNID.findOne({ pid: response.locals.account.pid }); request.account = response.locals.account; + if (request.pnid.deleted) { + // TODO - We just need to overhaul our API tbh + throw new Error('User not found'); + } + return next(); } catch (error) { response.cookie('error_message', error.message, { domain: '.pretendo.network' }); diff --git a/src/routes/account.js b/src/routes/account.js index 1f398b0..afd97d1 100644 --- a/src/routes/account.js +++ b/src/routes/account.js @@ -1,17 +1,19 @@ -const express = require('express'); const crypto = require('crypto'); +const express = require('express'); const DiscordOauth2 = require('discord-oauth2'); const Stripe = require('stripe'); const { REST: DiscordRest } = require('@discordjs/rest'); const { Routes: DiscordRoutes } = require('discord-api-types/v10'); +const { createChannel, createClient, Metadata } = require('nice-grpc'); +const { ApiServiceDefinition } = require('@pretendonetwork/grpc/api/v2/api_service'); const requireLoginMiddleware = require('../middleware/require-login'); const database = require('../database'); const cache = require('../cache'); const util = require('../util'); const { handleStripeEvent } = require('../stripe'); const logger = require('../logger'); -const config = require('../../config.json'); -const editorJSON = require('../json/miieditor.json'); +const editorJSON = require('../json/miieditor.json'); +const config = require('../config'); const { Router } = express; @@ -19,6 +21,9 @@ const stripe = new Stripe(config.stripe.secret_key); const router = new Router(); const discordRest = new DiscordRest({ version: '10' }).setToken(config.discord.bot_token); +const gRPCApiChannel = createChannel(`${config.grpc.api.host}:${config.grpc.api.port}`); +const gRPCApiClient = createClient(ApiServiceDefinition, gRPCApiChannel); + // Create OAuth client const discordOAuth = new DiscordOauth2({ clientId: config.discord.client_id, @@ -60,7 +65,7 @@ router.get('/', requireLoginMiddleware, async (request, response) => { // If no Discord account linked, generate an auth URL const discordAuthURL = discordOAuth.generateAuthUrl({ scope: ['identify', 'guilds'], - state: crypto.randomBytes(16).toString('hex'), + state: crypto.randomBytes(16).toString('hex') }); renderData.discordAuthURL = discordAuthURL; @@ -71,7 +76,8 @@ router.get('/', requireLoginMiddleware, async (request, response) => { router.get('/login', async (request, response) => { const renderData = { - error: request.cookies.error_message + error: request.cookies.error_message, + loginPath: '/account/login' }; response.render('account/login', renderData); @@ -88,7 +94,6 @@ router.post('/login', async (request, response) => { response.cookie('token_type', tokens.token_type, { domain: '.pretendo.network' }); response.redirect(request.redirect || '/account'); - } catch (error) { console.log(error); response.cookie('error_message', error.message, { domain: '.pretendo.network' }); @@ -112,7 +117,13 @@ router.get('/register', async (request, response) => { }); router.post('/register', async (request, response) => { - const { email, username, mii_name, password, password_confirm, 'h-captcha-response': hCaptchaResponse } = request.body; + const { email, username, mii_name, birthday, password, password_confirm, 'h-captcha-response': hCaptchaResponse } = request.body; + + // * IP must be forwarded to the account server so we can check for age related issues based on region. + // * This is NEVER recorded in our records, ever. See https://github.com/PretendoNetwork/account/pull/194 + // * for more details. Once the IP is used to query for location, both the IP and location are disregarded + // * and no data is stored for blocked users + const ip = request.ip; // TODO - Enable `CF-IPCountry` in Cloudflare and only use this as a fallback response.cookie('email', email, { domain: '.pretendo.network' }); response.cookie('username', username, { domain: '.pretendo.network' }); @@ -120,9 +131,11 @@ router.post('/register', async (request, response) => { try { const tokens = await util.register({ + ip, email, username, mii_name, + birthday, password, password_confirm, hCaptchaResponse @@ -152,12 +165,37 @@ router.get('/logout', async (_request, response) => { }); router.get('/forgot-password', async (request, response) => { - response.render('account/forgot-password'); + const renderData = { + input: request.cookies.input, + success_message: request.cookies.success_message, + error_message: request.cookies.error_message + }; + + response.clearCookie('input', { domain: '.pretendo.network' }); + + response.render('account/forgot-password', renderData); }); router.post('/forgot-password', async (request, response) => { - const apiResponse = await util.apiPostRequest('/v1/forgot-password', {}, request.body); - response.json(apiResponse.body); + const { input, 'h-captcha-response': hCaptchaResponse } = request.body; + + response.cookie('input', input, { domain: '.pretendo.network' }); + + try { + await util.forgotPassword({ + input, + hCaptchaResponse + }); + + response.clearCookie('input', { domain: '.pretendo.network' }); + + response.cookie('success_message', 'An email has been sent.', { domain: '.pretendo.network' }); + + response.redirect(request.redirect || '/account/forgot-password'); + } catch (error) { + response.cookie('error_message', error.message, { domain: '.pretendo.network' }); + return response.redirect('/account/forgot-password'); + } }); router.get('/reset-password', async (request, response) => { @@ -176,9 +214,9 @@ router.get('/connect/discord', requireLoginMiddleware, async (request, response) tokens = await discordOAuth.tokenRequest({ code: request.query.code, scope: 'identify guilds', - grantType: 'authorization_code', + grantType: 'authorization_code' }); - } catch (error) { + } catch { response.cookie('error_message', 'Invalid Discord authorization code. Please try again', { domain: '.pretendo.network' }); return response.redirect('/account'); } @@ -266,7 +304,7 @@ router.get('/upgrade', requireLoginMiddleware, async (request, response) => { renderData.tiers = products .filter(product => product.active) .sort((a, b) => +a.metadata.tier_level - +b.metadata.tier_level) - .map(product => { + .map((product) => { const price = prices.find(price => price.id === product.default_price); const perks = []; @@ -284,7 +322,7 @@ router.get('/upgrade', requireLoginMiddleware, async (request, response) => { name: product.name, description: product.description, perks, - price: (price.unit_amount / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }), + price: (price.unit_amount / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }) }; }); @@ -333,8 +371,8 @@ router.post('/stripe/checkout/:priceId', requireLoginMiddleware, async (request, line_items: [ { price: priceId, - quantity: 1, - }, + quantity: 1 + } ], customer: customer.id, mode: 'subscription', @@ -366,9 +404,9 @@ router.post('/stripe/unsubscribe', requireLoginMiddleware, async (request, respo const updateData = { 'connections.stripe.subscription_id': null, - 'connections.stripe.price_id': null, + 'connections.stripe.price_id': null, 'connections.stripe.tier_level': 0, - 'connections.stripe.tier_name': null, + 'connections.stripe.tier_name': null }; if (pnid.get('access_level') < 2) { @@ -407,5 +445,162 @@ router.post('/stripe/webhook', async (request, response) => { response.json({ received: true }); }); +router.get('/sso/discourse', async (request, response, next) => { + if (!request.query.sso || !request.query.sig) { + return next(); // * 404 + } + + const signature = util.signDiscoursePayload(request.query.sso); + + if (signature !== request.query.sig) { + return next(); // * 404 + } + + const decodedPayload = new URLSearchParams(Buffer.from(request.query.sso, 'base64').toString()); + + if (!decodedPayload.has('nonce') || !decodedPayload.has('return_sso_url')) { + return next(); // * 404 + } + + // * User already logged in, don't show the login prompt + if (request.cookies.access_token && request.cookies.refresh_token) { + try { + const accountData = await util.getUserAccountData(request, response); + + // * Discourse REQUIRES unique emails, however we do not due to NN also + // * not requiring unique email addresses. Email addresses, for now, + // * are faked using the users PID. This will essentially disable email + // * for the forum, but it's a bullet we have to bite for right now. + // TODO - We can run our own SMTP server which maps fake emails (pid@pretendo.whatever) to users real emails + const payload = Buffer.from(new URLSearchParams({ + nonce: decodedPayload.get('nonce'), + external_id: accountData.pid, + email: `${accountData.pid}@invalid.com`, // * Hack to get unique emails + username: accountData.username, + name: accountData.username, + avatar_url: accountData.mii.image_url, + avatar_force_update: true + }).toString()).toString('base64'); + + const query = new URLSearchParams({ + sso: payload, + sig: util.signDiscoursePayload(payload) + }).toString(); + + return response.redirect(`${decodedPayload.get('return_sso_url')}?${query}`); + } catch (error) { + console.log(error); + response.cookie('error_message', error.message, { domain: '.pretendo.network' }); + return response.redirect('/account/logout'); + } + } + + // * User not logged in already, show the login page + const renderData = { + discourse: { + // * Fast and dirty sanitization. If the strings contain + // * characters not allow in their encodings, they are removed + // * when doing this decode-encode. Since neither base64/hex + // * allow characters such as < and >, this prevents injection. + payload: Buffer.from(request.query.sso, 'base64').toString('base64'), + signature: Buffer.from(request.query.sig, 'hex').toString('hex') + }, + loginPath: '/account/sso/discourse' + }; + + response.render('account/login', renderData); // * Just reuse the /account/login page, no need to duplicate the pages +}); + +router.post('/sso/discourse', async (request, response, next) => { + if (!request.body['discourse-sso-payload'] || !request.body['discourse-sso-signature']) { + return next(); // * 404 + } + + const { username, password } = request.body; + + // * Fast and dirty sanitization. If the strings contain + // * characters not allow in their encodings, they are removed + // * when doing this decode-encode. Since neither base64/hex + // * allow characters such as < and >, this prevents injection. + const discoursePayload = Buffer.from(request.body['discourse-sso-payload'], 'base64').toString('base64'); + const discourseSignature = Buffer.from(request.body['discourse-sso-signature'], 'hex').toString('hex'); + + const signature = util.signDiscoursePayload(discoursePayload); + + if (signature !== discourseSignature) { + return next(); // * 404 + } + + const decodedPayload = new URLSearchParams(Buffer.from(discoursePayload, 'base64').toString()); + + if (!decodedPayload.has('nonce') || !decodedPayload.has('return_sso_url')) { + return next(); // * 404 + } + + try { + const tokens = await util.login(username, password); + + response.cookie('refresh_token', tokens.refresh_token, { domain: '.pretendo.network' }); + response.cookie('access_token', tokens.access_token, { domain: '.pretendo.network' }); + response.cookie('token_type', tokens.token_type, { domain: '.pretendo.network' }); + + // * Need to set these here so that getUserAccountData can see them + request.cookies.refresh_token = tokens.refresh_token; + request.cookies.access_token = tokens.access_token; + request.cookies.token_type = tokens.token_type; + + const accountData = await util.getUserAccountData(request, response); + + // * Discourse REQUIRES unique emails, however we do not due to NN also + // * not requiring unique email addresses. Email addresses, for now, + // * are faked using the users PID. This will essentially disable email + // * for the forum, but it's a bullet we have to bite for right now. + // TODO - We can run our own SMTP server which maps fake emails (pid@pretendo.whatever) to users real emails + const payload = Buffer.from(new URLSearchParams({ + nonce: decodedPayload.get('nonce'), + external_id: accountData.pid, + email: `${accountData.pid}@invalid.com`, // * Hack to get unique emails + username: accountData.username, + name: accountData.username, + avatar_url: accountData.mii.image_url, + avatar_force_update: true + }).toString()).toString('base64'); + + const query = new URLSearchParams({ + sso: payload, + sig: util.signDiscoursePayload(payload) + }).toString(); + + return response.redirect(`${decodedPayload.get('return_sso_url')}?${query}`); + } catch (error) { + console.log(error); + response.cookie('error_message', error.message, { domain: '.pretendo.network' }); + return response.redirect('/account/login'); + } +}); + +router.post('/delete', requireLoginMiddleware, async (request, response) => { + const { pnid } = request; + + try { + await gRPCApiClient.deleteAccount({ + pid: pnid.pid + }, { + metadata: Metadata({ + 'X-API-Key': config.grpc.api.api_key + }) + }); + + response.json({ + success: true + }); + } catch (error) { + console.error('failed to delete PNID', error); + response.json({ + success: false, + error + }); + } +}); module.exports = router; diff --git a/src/routes/blog.js b/src/routes/blog.js index 2e80238..9d1c71a 100644 --- a/src/routes/blog.js +++ b/src/routes/blog.js @@ -1,41 +1,42 @@ -const { Router } = require('express'); -const logger = require('../logger'); -const router = new Router(); - -const fs = require('fs'); const path = require('path'); +const fs = require('fs-extra'); +const { Router } = require('express'); const { marked } = require('marked'); const matter = require('gray-matter'); +const logger = require('../logger'); -const postList = () => { - const files = fs.readdirSync('blogposts'); +const router = new Router(); - // We get the info for each blogpost, ignoring the ones starting with _ - const posts = files - .filter(filename => !filename.startsWith('_')) - .filter(filename => filename.endsWith('.md')) // Ignores other files/folders - .map((filename) => { - const slug = filename.replace('.md', ''); - const rawPost = fs.readFileSync( - path.join('blogposts', `${filename}`), - 'utf-8' - ); - const { data: postInfo } = matter(rawPost); - return { - slug, - postInfo, - }; - }); +async function getPostsList() { + const files = await fs.readdir('blogposts'); + + const filteredFiles = files + .filter(filename => !filename.startsWith('_')) // Ignore files starting with _ + .filter(filename => filename.endsWith('.md')); // Ignores files that don't end with .md + + const posts = await Promise.all(filteredFiles.map(async (filename) => { + const slug = filename.replace('.md', ''); + const rawPost = await fs.readFile( + path.join('blogposts', `${filename}`), + 'utf-8' + ); + const { data: postInfo } = matter(rawPost); + return { + slug, + postInfo + }; + })); posts.sort((a, b) => { return new Date(b.postInfo.date) - new Date(a.postInfo.date); }); return posts; -}; +} router.get('/', async (request, response) => { - const renderData = { + const postList = await getPostsList(); + const renderData = { postList }; @@ -44,9 +45,10 @@ router.get('/', async (request, response) => { // RSS feed router.get('/feed.xml', async (request, response) => { + const postList = await getPostsList(); // Adds the pubDate and the cover_extension to the post array - const posts = postList().map((post) => { + const posts = postList.map((post) => { post.postInfo.pubDate = new Date(post.postInfo.date).toUTCString(); post.postInfo.cover_extension = post.postInfo.cover_image.substring(post.postInfo.cover_image.lastIndexOf('.') + 1); return post; @@ -60,26 +62,30 @@ router.get('/feed.xml', async (request, response) => { }); router.get('/:slug', async (request, response, next) => { - - const renderData = { - layout: 'blog-opengraph', - postList, + const renderData = { + layout: 'blog-opengraph' }; // Get the name of the post from the URL const postName = request.params.slug; + if (!/^[0-9-]+$/.test(postName)) { + logger.error(`Invalid blog post name name ${postName}`); + next(); + return; + } + // Get the markdown file corresponding to the post let rawPost; try { - rawPost = fs.readFileSync(path.join('blogposts', `${postName}.md`), 'utf-8'); - } catch(err) { + rawPost = await fs.readFile(path.join('blogposts', `${postName}.md`), 'utf-8'); + } catch (err) { logger.error(err); next(); return; } // Convert the post info into JSON and separate it and the content - // eslint-disable-next-line prefer-const + let { data: postInfo, content } = matter(rawPost); renderData.postInfo = postInfo; diff --git a/src/routes/docs.js b/src/routes/docs.js index e507436..6f5aeb6 100644 --- a/src/routes/docs.js +++ b/src/routes/docs.js @@ -1,8 +1,11 @@ +const path = require('node:path'); +const fs = require('node:fs'); const { Router } = require('express'); -const router = new Router(); +const errors = require('@pretendonetwork/error-codes'); const util = require('../util'); -const errorList = require('../../docs/common/errorList.json'); +const errorList = errors.getAllErrors(); +const router = new Router(); router.get('/', async (request, response) => { response.redirect('/docs/welcome'); @@ -10,7 +13,7 @@ router.get('/', async (request, response) => { router.get('/welcome', async (request, response) => { const renderData = { - currentPage: 'welcome', + currentPage: 'welcome' }; response.render('docs/welcome', renderData); @@ -18,22 +21,30 @@ router.get('/welcome', async (request, response) => { router.get('/install', async (request, response) => { const renderData = { - currentPage: 'install', + currentPage: 'install' }; response.render('docs/install', renderData); }); -router.get('/search', async (request, response) => { +router.get([ + '/search', // TODO - Deprecate search page + '/errors' +], async (_request, response) => { const renderData = { errorList: JSON.stringify(errorList), - currentPage: 'search', + currentPage: 'errors' }; + response.render('docs/search', renderData); }); +router.get('/error', async (_request, response) => { + response.redirect(307, '/docs/errors'); +}); + router.get('/:page', async (request, response, next) => { - const renderData = {}; + const renderData = {}; const locale = response.locals.localeString; const pageName = request.params.page; @@ -50,6 +61,44 @@ router.get('/:page', async (request, response, next) => { response.render('docs/docs', renderData); }); +router.get([ + '/errors/:errorCode', // TODO - Deprecate "errors" route + '/error/:errorCode' +], async (request, response, next) => { + const locale = response.locals.localeString; + const error = request.params.errorCode; + + const [sysmodule, errorCode] = error.split('-'); + + if (!errorCode) { + return next(); + } + + let template = fs.readFileSync(path.join(__dirname, '../../docs/common/error-page-template.md'), { + encoding: 'utf8' + }); + + const errorInfo = errors.getErrorInfo(sysmodule, errorCode, locale); + + if (!errorInfo) { + return next(); + } + + template = template.replace('{module}', sysmodule); + template = template.replace('{code}', errorCode); + template = template.replace('{system}', errorInfo.module.system); + template = template.replace('{module_name}', errorInfo.module.name); + template = template.replace('{module_description}', errorInfo.module.description); + template = template.replace('{message}', errorInfo.message.replace(/\s\s+/g, ' ')); + template = template.replace('{description}', errorInfo.long_description); + template = template.replace('{solution}', errorInfo.long_solution); + + response.render('docs/docs', { + content: util.parseDocs(template), + currentPage: 'errors' + }); +}); + router.get('/:subpath/:page', async (request, response, next) => { const locale = response.locals.localeString; const pageName = request.params.page; diff --git a/src/routes/home.js b/src/routes/home.js index 11544c0..c5eaac8 100644 --- a/src/routes/home.js +++ b/src/routes/home.js @@ -1,10 +1,10 @@ const { Router } = require('express'); -const router = new Router(); - const { getGithubProjectsCache } = require('../cache'); +const router = new Router(); + router.get('/', async (request, response) => { - const renderData = {}; + const renderData = {}; const githubProjectsCache = await getGithubProjectsCache(); @@ -20,9 +20,10 @@ router.get('/', async (request, response) => { } shuffleArray(specialThanksPeople); + const pivot = specialThanksPeople.length / 2; // Slices the array in half - const specialThanksFirstRow = specialThanksPeople.slice(0, 4); - const specialThanksSecondRow = specialThanksPeople.slice(4); + const specialThanksFirstRow = specialThanksPeople.slice(0, pivot); + const specialThanksSecondRow = specialThanksPeople.slice(pivot); // Builds the final array to be sent to the view, and triples each row. renderData.specialThanksPeople = { @@ -47,7 +48,7 @@ router.get('/', async (request, response) => { }; // Calculates individual completion percentages and progress states - githubProjectsCache.sections.forEach(section => { + githubProjectsCache.sections.forEach((section) => { const { todo, in_progress, done } = section.cards; // Calculates the completion percentage of the project, and sums it to the total @@ -56,7 +57,7 @@ router.get('/', async (request, response) => { const sectionTitle = `${section.title} [${Math.floor(sectionCompletionPercentage * 100)}%]`; - switch(sectionCompletionPercentage) { + switch (sectionCompletionPercentage) { case 0: totalProgress.cards.todo.push(sectionTitle); break; diff --git a/src/routes/progress.js b/src/routes/progress.js index 1de949e..9e43225 100644 --- a/src/routes/progress.js +++ b/src/routes/progress.js @@ -1,10 +1,10 @@ const { Router } = require('express'); -const router = new Router(); - const { getGithubProjectsCache, getStripeDonationCache } = require('../cache'); +const router = new Router(); + router.get('/', async (request, response) => { - const renderData = { + const renderData = { progressLists: await getGithubProjectsCache(), donationCache: await getStripeDonationCache() }; diff --git a/src/routes/terms.js b/src/routes/terms.js new file mode 100644 index 0000000..40027e8 --- /dev/null +++ b/src/routes/terms.js @@ -0,0 +1,41 @@ +const path = require('path'); +const fs = require('fs-extra'); +const { Router } = require('express'); +const { marked } = require('marked'); +const matter = require('gray-matter'); +const logger = require('../logger'); + +const router = new Router(); + +router.get('/:slug', async (request, response, next) => { + const renderData = { + layout: 'blog-opengraph' + }; + + const termName = request.params.slug; + + if (!/^[a-z]+$/.test(termName)) { + logger.error(`Invalid term name ${termName}`); + next(); + return; + } + + let rawTerm; + try { + rawTerm = await fs.readFile(path.join('terms', `${termName}.md`), 'utf-8'); + } catch (err) { + logger.error(err); + next(); + return; + } + + const { data: termInfo, content } = matter(rawTerm); + renderData.termInfo = termInfo; + + const htmlPost = marked.parse(content); + renderData.htmlPost = htmlPost; + + response.render('terms/term', renderData); +}); + +module.exports = router; diff --git a/src/schema/pnid.js b/src/schema/pnid.js index a3f023d..e613ceb 100644 --- a/src/schema/pnid.js +++ b/src/schema/pnid.js @@ -2,6 +2,7 @@ const { Schema } = require('mongoose'); // Only define what we will be using const PNIDSchema = new Schema({ + deleted: Boolean, pid: { type: Number, unique: true diff --git a/src/server.js b/src/server.js index 853e33e..bb8765a 100644 --- a/src/server.js +++ b/src/server.js @@ -1,59 +1,67 @@ process.title = 'Pretendo - Website'; +process.on('SIGTERM', () => { + process.exit(0); +}); const express = require('express'); const handlebars = require('express-handlebars'); const morgan = require('morgan'); const expressLocale = require('express-locale'); const cookieParser = require('cookie-parser'); -//const Stripe = require('stripe'); +// const Stripe = require('stripe'); +const config = require('./config'); const redirectMiddleware = require('./middleware/redirect'); const renderDataMiddleware = require('./middleware/render-data'); const database = require('./database'); -const util = require('./util'); const logger = require('./logger'); -const config = require('../config.json'); const { http: { port } } = config; const app = express(); -//const stripe = new Stripe(config.stripe.secret_key); +// const stripe = new Stripe(config.stripe.secret_key); + +app.set('trust proxy', true); // TODO - Make this configurable logger.info('Setting up Middleware'); app.use(morgan('dev')); -//app.use(express.json()); -app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } })); +// app.use(express.json()); +app.use(express.json({ + verify: (req, res, buf) => { + req.rawBody = buf; + } +})); app.use(express.urlencoded({ extended: true })); app.use(cookieParser()); app.use(expressLocale({ - 'priority': ['cookie', 'accept-language', 'map', 'default'], + priority: ['cookie', 'accept-language', 'map', 'default'], cookie: { name: 'preferredLocale' }, // Map unavailable regions to available locales from the same language map: { /* TODO: map more regions to the available locales */ - en: 'en-US', 'en-AU': 'en-US', 'en-CA': 'en-US', - ar: 'ar-AR', - ca: 'ca-ES', - cs: 'cs-CZ', - cn: 'zh-CN', - de: 'de-DE', - nl: 'nl-NL', - es: 'es-ES', - fr: 'fr-FR', 'fr-CA': 'fr-FR', 'fr-CH': 'fr-FR', - fi: 'fi-FI', - it: 'it-IT', 'it-CH': 'it-IT', - ja: 'ja-JP', - kk: 'kk-KZ', - ko: 'ko-KR', - nb: 'nb-NO', - no: 'nb-NO', - pl: 'pl-PL', - pt: 'pt-BR', - ro: 'ro-RO', - ru: 'ru-RU', - sr: 'sr-RS', - tr: 'tr-TR', - uk: 'uk-UA', + 'en': 'en-US', 'en-AU': 'en-US', 'en-CA': 'en-US', + 'ar': 'ar-AR', + 'ca': 'ca-ES', + 'cs': 'cs-CZ', + 'cn': 'zh-CN', + 'de': 'de-DE', + 'nl': 'nl-NL', + 'es': 'es-ES', + 'fr': 'fr-FR', 'fr-CA': 'fr-FR', 'fr-CH': 'fr-FR', + 'fi': 'fi-FI', + 'it': 'it-IT', 'it-CH': 'it-IT', + 'ja': 'ja-JP', + 'kk': 'kk-KZ', + 'ko': 'ko-KR', + 'nb': 'nb-NO', + 'no': 'nb-NO', + 'pl': 'pl-PL', + 'pt': 'pt-BR', + 'ro': 'ro-RO', + 'ru': 'ru-RU', + 'sr': 'sr-RS', + 'tr': 'tr-TR', + 'uk': 'uk-UA' }, allowed: [ 'en', 'en-US', 'en-GB', 'en-AU', 'en-CA', @@ -81,7 +89,7 @@ app.use(expressLocale({ 'uk', 'uk-UA', 'en@uwu' ], - 'default': 'en-US' + default: 'en-US' })); app.use(redirectMiddleware); app.use(renderDataMiddleware); @@ -92,6 +100,7 @@ app.use(express.static('public')); logger.info('Importing routes'); const routes = { home: require('./routes/home'), + terms: require('./routes/terms'), faq: require('./routes/faq'), docs: require('./routes/docs'), progress: require('./routes/progress'), @@ -102,6 +111,7 @@ const routes = { }; app.use('/', routes.home); +app.use('/terms', routes.terms); app.use('/faq', routes.faq); app.use('/docs', routes.docs); app.use('/progress', routes.progress); @@ -113,10 +123,8 @@ app.use('/nso-legacy-pack', routes.aprilfools); logger.info('Creating 404 status handler'); // This works because it is the last router created // Meaning the request could not find a valid router -app.use((request, response, next) => { - const fullUrl = util.fullUrl(request); - logger.warn(`HTTP 404 at ${fullUrl}`); - next(); +app.use((request, response) => { + response.render('404'); }); logger.info('Setting up handlebars engine'); @@ -157,8 +165,12 @@ app.engine('handlebars', handlebars({ return string.toLowerCase().replaceAll(/ /g, '-'); }, section(name, options) { - if (!this._sections) this._sections = {}; - if (!this._sections[name]) this._sections[name] = []; + if (!this._sections) { + this._sections = {}; + } + if (!this._sections[name]) { + this._sections[name] = []; + } this._sections[name].push(options.fn(this)); return null; } diff --git a/src/stripe.js b/src/stripe.js index eddb382..53e417b 100644 --- a/src/stripe.js +++ b/src/stripe.js @@ -1,9 +1,9 @@ const Stripe = require('stripe'); +const config = require('./config'); const mailer = require('./mailer'); const util = require('./util'); const database = require('./database'); const logger = require('./logger'); -const config = require('../config.json'); const stripe = new Stripe(config.stripe.secret_key); @@ -95,12 +95,12 @@ async function handleStripeEvent(event) { if (subscription.status === 'canceled' && currentSubscriptionId && subscription.id !== currentSubscriptionId) { // Canceling old subscription, do nothing but update webhook date and remove Discord roles if (product.metadata.beta === 'true') { - util.removeDiscordMemberTesterRole(discordId).catch(error => { + util.removeDiscordMemberTesterRole(discordId).catch((error) => { logger.error(`Error removing user Discord tester role | ${customer.id}, ${discordId}, ${pid} | - ${error.message}`); }); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -123,7 +123,7 @@ async function handleStripeEvent(event) { 'connections.stripe.price_id': subscription.status === 'active' ? subscription.plan.id : null, 'connections.stripe.tier_level': subscription.status === 'active' ? Number(product.metadata.tier_level || 0) : 0, 'connections.stripe.tier_name': subscription.status === 'active' ? product.name : null, - 'connections.stripe.latest_webhook_timestamp': event.created, + 'connections.stripe.latest_webhook_timestamp': event.created }; if (product.metadata.beta === 'true') { @@ -133,7 +133,7 @@ async function handleStripeEvent(event) { updateData.server_access_level = 'test'; } - util.assignDiscordMemberTesterRole(discordId).catch(error => { + util.assignDiscordMemberTesterRole(discordId).catch((error) => { logger.error(`Error assigning user Discord tester role | ${customer.id}, ${discordId}, ${pid} | - ${error.message}`); }); } else { @@ -144,7 +144,7 @@ async function handleStripeEvent(event) { updateData.server_access_level = 'prod'; } - util.removeDiscordMemberTesterRole(discordId).catch(error => { + util.removeDiscordMemberTesterRole(discordId).catch((error) => { logger.error(`Error removing user Discord tester role | ${customer.id}, ${discordId}, ${pid} | - ${error.message}`); }); } @@ -188,7 +188,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.assignDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.assignDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error assigning user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -215,7 +215,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -242,7 +242,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -269,7 +269,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); diff --git a/src/util.js b/src/util.js index 043091a..a2bc999 100644 --- a/src/util.js +++ b/src/util.js @@ -1,13 +1,13 @@ const path = require('path'); +const crypto = require('crypto'); const fs = require('fs-extra'); const got = require('got'); -const crypto = require('crypto'); const { marked } = require('marked'); const { REST: DiscordRest } = require('@discordjs/rest'); const { Routes: DiscordRoutes } = require('discord-api-types/v10'); const merge = require('lodash.merge'); +const config = require('./config'); const logger = require('./logger'); -const config = require('../config.json'); const baseLocale = require(`${__dirname}/../locales/en_US.json`); const discordRest = new DiscordRest({ version: '10' }).setToken(config.discord.bot_token); @@ -34,14 +34,13 @@ function getLocale(locale) { } function getRawDocs(locale, subpath, pageName) { - const localePath = path.join(__dirname, '../docs', locale.replace('-', '_'), subpath, `${pageName}.md`); const defaultPath = path.join(__dirname, '../docs', 'en_US', subpath, `${pageName}.md`); if (fs.existsSync(localePath)) { return { content: parseDocs(fs.readFileSync(localePath, 'utf8')), - MDLocale: locale, + MDLocale: locale }; } else if (fs.existsSync(defaultPath)) { return { @@ -77,7 +76,7 @@ function apiGetRequest(path, headers) { responseType: 'json', throwHttpErrors: false, https: { - rejectUnauthorized: false, // Needed for self-signed certificates on localhost testing + rejectUnauthorized: false // Needed for self-signed certificates on localhost testing }, headers }); @@ -88,7 +87,7 @@ function apiPostRequest(path, headers, json) { responseType: 'json', throwHttpErrors: false, https: { - rejectUnauthorized: false, // Needed for self-signed certificates on localhost testing + rejectUnauthorized: false // Needed for self-signed certificates on localhost testing }, headers, json @@ -99,7 +98,7 @@ function apiDeleteRequest(path, headers, json) { return got.delete(`${config.api_base}${path}`, { throwHttpErrors: false, https: { - rejectUnauthorized: false, // Needed for self-signed certificates on localhost testing + rejectUnauthorized: false // Needed for self-signed certificates on localhost testing }, headers, json @@ -130,6 +129,16 @@ async function login(username, password) { return apiResponse.body; } +async function forgotPassword(forgotPasswordData) { + const apiResponse = await apiPostRequest('/v1/forgot-password', {}, forgotPasswordData); + + if (apiResponse.statusCode !== 200) { + throw new Error(apiResponse.body.error); + } + + return apiResponse.body; +} + async function refreshLogin(request, response) { const apiResponse = await apiPostRequest('/v1/login', {}, { refresh_token: request.cookies.refresh_token, @@ -152,9 +161,9 @@ async function refreshLogin(request, response) { request.cookies.token_type = tokens.token_type; } -async function getUserAccountData(request, response, fromRetry=false) { +async function getUserAccountData(request, response, fromRetry = false) { const apiResponse = await apiGetRequest('/v1/user', { - 'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}` + Authorization: `${request.cookies.token_type} ${request.cookies.access_token}` }); if (apiResponse.statusCode !== 200 && fromRetry === true) { @@ -170,9 +179,9 @@ async function getUserAccountData(request, response, fromRetry=false) { return apiResponse.body; } -async function updateDiscordConnection(discordUser, request, response, fromRetry=false) { +async function updateDiscordConnection(discordUser, request, response, fromRetry = false) { const apiResponse = await apiPostRequest('/v1/connections/add/discord', { - 'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}` + Authorization: `${request.cookies.token_type} ${request.cookies.access_token}` }, { data: { id: discordUser.id @@ -192,7 +201,7 @@ async function updateDiscordConnection(discordUser, request, response, fromRetry async function removeDiscordConnection(request, response, fromRetry = false) { const apiResponse = await apiDeleteRequest('/v1/connections/remove/discord', { - 'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}` + Authorization: `${request.cookies.token_type} ${request.cookies.access_token}` }); if (apiResponse.statusCode !== 200 && fromRetry === true) { @@ -247,6 +256,10 @@ async function removeDiscordMemberTesterRole(memberId) { } } +function signDiscoursePayload(payload) { + return crypto.createHmac('sha256', config.discourse.sso.secret).update(payload).digest('hex'); +} + module.exports = { fullUrl, getLocale, @@ -257,6 +270,7 @@ module.exports = { apiDeleteRequest, register, login, + forgotPassword, refreshLogin, getUserAccountData, updateDiscordConnection, @@ -265,5 +279,6 @@ module.exports = { assignDiscordMemberSupporterRole, assignDiscordMemberTesterRole, removeDiscordMemberSupporterRole, - removeDiscordMemberTesterRole + removeDiscordMemberTesterRole, + signDiscoursePayload }; diff --git a/terms/cookies.md b/terms/cookies.md new file mode 100644 index 0000000..1934fe3 --- /dev/null +++ b/terms/cookies.md @@ -0,0 +1,72 @@ +[//]: <> (Basically this whole document is a mashup of generated/pre-made documents from both https://termly.io/ and https://www.termsfeed.com/) +[//]: <> (and then modified slightly to fit our needs. We did not write most of this, but have done our best to make it reflect our goals/intentions.) +[//]: <> (However there is quite a lot of legalese here, and possibly broad policies which we do not necessarily want/need. In those cases we are more) +[//]: <> (than happy to revise/remove the problematic areas to clarify our goals/intentions.) + +# Cookies Policy + +## Last updated: March 17th, 2025 + +This Cookies Policy explains what Cookies are and how We use them. You should read this policy so You can understand what type of cookies We use, or the information We collect using Cookies and how that information is used. + +Cookies do not typically contain any information that personally identifies a user, but personal information that We store about You may be linked to the information stored in and obtained from Cookies. For further information on how We use, store and keep your personal data secure, see our [Privacy Policy](/terms/privacy). + +We do not store sensitive personal information, such as mailing addresses, account passwords, etc. in the Cookies We use. + +## Interpretation and Definitions + +### Interpretation + +The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. + +### Definitions + +For the purposes of this Cookies Policy: + +- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Cookies Policy) refers to Yesterware LLC. +- **Cookies** means small files that are placed on Your computer, mobile device or any other device by a website, containing details of your browsing history on that website among its many uses. +- **Website** refers to Pretendo Network, accessible from [https://pretendo.network](https://pretendo.network) +- **You** means the individual accessing or using the Website, or a company, or any legal entity on behalf of which such individual is accessing or using the Website, as applicable. + +The use of the Cookies +---------------------- + +### Type of Cookies We Use + +We do not use cookies to track You or Your behavior across the web. All Cookies in use are necessary for the operation of Our services. Not all Cookies are issued by Us. Some Cookies may be issued by [Cloudflare](https://cloudflare.com) as part of Our infrastructure. For detailed information on the Cookies issued by Cloudflare, see the [Cloudflare Cookies](https://developers.cloudflare.com/fundamentals/reference/policies-compliances/cloudflare-cookies) documentation. + +Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close your web browser. Refer to the table below for information on what Cookies We make use of. + +| Name | Type | Issued By | Use | +| --------------- | ---------- | ------------------------------------ | -------------------------------- | +| access_token | Session | Us | Authentication | +| refresh_token | Session | Us | Refresh expired access tokens | +| token_type | Session | Us | The type of token in use | +| preferredLocale | Persistent | Us | Selected locale for translations | +| _cfuvid | Session | [Cloudflare](https://cloudflare.com) | Rate limiting | +| __cf_bm | Persistent | [Cloudflare](https://cloudflare.com) | Bot detection | + +### Your Choices Regarding Cookies + +If You prefer to avoid the use of Cookies on the Website, first You must disable the use of Cookies in your browser and then delete the Cookies saved in your browser associated with this website. You may use this option for preventing the use of Cookies at any time. + +If You do not accept Our Cookies, You may experience some inconvenience in your use of the Website and some features may not function properly. + +If You'd like to delete Cookies or instruct your web browser to delete or refuse Cookies, please visit the help pages of your web browser. + +- For the Chrome web browser, please visit this page from Google: [https://support.google.com/accounts/answer/32050](https://support.google.com/accounts/answer/32050) +- For the Internet Explorer web browser, please visit this page from Microsoft: [http://support.microsoft.com/kb/278835](http://support.microsoft.com/kb/278835) +- For the Firefox web browser, please visit this page from Mozilla: [https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored](https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored) +- For the Safari web browser, please visit this page from Apple: [https://support.apple.com/guide/safari/manage-cookies-and-website-data-sfri11471/mac](https://support.apple.com/guide/safari/manage-cookies-and-website-data-sfri11471/mac) + +For any other web browser, please visit your web browser's official web pages. + +## Modifications to the Policy + +We may update this Cookies Policy from time to time. We will notify You of any changes by updating the "Last updated" date at the top of this policy. We may also notify You of any changes via email. You are advised to review this page periodically for any changes. Changes to this Cookies Policy are effective when they are posted on this page. + +### Contact Us + +If you have any questions about this Cookies Policy, You can contact us: + +- By email: `privacy@pretendo.network` diff --git a/terms/privacy.md b/terms/privacy.md new file mode 100644 index 0000000..6d3be50 --- /dev/null +++ b/terms/privacy.md @@ -0,0 +1,420 @@ +[//]: <> (Basically this whole document is a mashup of generated/pre-made documents from both https://termly.io/ and https://www.termsfeed.com/) +[//]: <> (and then modified slightly to fit our needs. We did not write most of this, but have done our best to make it reflect our goals/intentions.) +[//]: <> (However there is quite a lot of legalese here, and possibly broad policies which we do not necessarily want/need. In those cases we are more) +[//]: <> (than happy to revise/remove the problematic areas to clarify our goals/intentions.) + +# Privacy Policy + +## Last updated: March 17th, 2025 + +## Interpretation and Definitions + +### Interpretation + +The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. + +### Definitions + +For the purposes of this Privacy Policy: + +- **Account** means a unique account created for You to access Our Service or parts of Our Service. +- **Affiliate** means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority. +- **Application** refers to Pretendo Network, the software program provided by the Company. +- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Yesterware LLC. +- **Country** refers to: Florida, United States +- **Device** means any device that can access the Service such as a computer, a cellphone or digital tablet, or game console. +- **Personal Data** is any information that relates to an identified or identifiable individual. +- **Service** refers to the Application. +- **Service Provider** means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. +- **Usage Data** refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). +- **You/Your** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. + +This privacy notice describes how and why We might collect, store, use, and/or share ("**process**") Your information when You use Our services ("**Services**"), such as when You: + +- Visit Our website at https://pretendo.network, or any website of Ours that links to this privacy notice +- Download and use Our applications/software, or any other application of Ours that links to this privacy notice +- Engage with Us in other related ways, including any sales, marketing, or events + +**Questions or concerns?** Reading this privacy notice will help You understand Your privacy rights and choices. If You do not agree with Our policies and practices, please do not use Our Services. If You still have any questions or concerns, please contact Us by using the contact details provided in the section "[Contact Us](#contact-us)" below + +### SUMMARY OF KEY POINTS + +***We aim to collect as little information as possible about You outside of what is required for Us to operate Our Services. We do not collect excess personal data, and we do not directly share Your information with 3rd parties outside of what is automatically collected as part of Our Services. We do not sell or otherwise profit from Your data.*** + +***This summary provides key points from Our privacy notice, but You can find out more details about any of these topics by clicking the link following each key point or by using Our*** [***table of contents***](#table-of-contents) ***below to find the section You are looking for.*** + +**What personal information do We process?** When You visit, use, or navigate Our Services, We may process personal information depending on how You interact with Us and the Services, the choices You make, and the products and features You use. Learn more about [personal information You disclose to Us](#personal-information-you-disclose-to-us). + +**Do We process any sensitive personal information?** We do not process sensitive personal information. + +**Do We receive any information from third parties?** We do not receive any information from third parties. + +**How do We process Your information?** We process Your information to provide, improve, and administer Our Services, communicate with You, for security and fraud prevention, and to comply with law. We may also process Your information for other purposes with Your consent. We process Your information only when We have a valid legal reason to do so. Learn more about [how We process Your information](#2-how-do-we-process-your-information). + +**In what situations and with which parties do We share personal information?** We may share information in specific situations and with specific third parties. Learn more about [when and with whom We share Your personal information](#4-when-and-with-whom-do-we-share-your-personal-information). + +**How do We keep Your information safe?** We have organizational and technical processes and procedures in place to protect Your personal information. However, no electronic transmission over the internet or information storage technology can be guaranteed to be 100% secure, so We cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat Our security and improperly collect, access, steal, or modify Your information. Learn more about [how We keep Your information safe](#8-how-do-we-keep-your-information-safe). + +**What are Your rights?** Depending on where You are located geographically, the applicable privacy law may mean You have certain rights regarding Your personal information. Learn more about [Your privacy rights](#9-what-are-your-privacy-rights). + +**How do You exercise Your rights?** The easiest way to exercise Your rights is by contacting Us. We will consider and act upon any request in accordance with applicable data protection laws. + +Want to learn more about what We do with any information We collect? [Review the privacy notice in full](#table-of-contents). + +### TABLE OF CONTENTS + +1. [What Information Do We Collect?](#1-what-information-do-we-collect) +2. [How Do We Process Your Information?](#2-how-do-we-process-your-information) +3. [What Legal Bases Do We Rely on to Process Your Personal Information?](#3-what-legal-bases-do-we-rely-on-to-process-your-information) +4. [When and With Whom Do We Share Your Personal Information?](#4-when-and-with-whom-do-we-share-your-personal-information) +5. [Do We Use Cookies and Other Tracking Technologies?](#5-do-we-use-cookies-and-other-tracking-technologies) +6. [Is Your Information Transferred Internationally?](#6-is-your-information-transferred-internationally) +7. [How Long Do We Keep Your Information?](#7-how-long-do-we-keep-your-information) +8. [How Do We Keep Your Information Safe?](#8-how-do-we-keep-your-information-safe) +9. [What Are Your Privacy Rights?](#9-what-are-your-privacy-rights) +10. [Controls for Do-not-track Features](#10-controls-for-do-not-track-features) +11. [Do California Residents Have Specific Privacy Rights?](#11-do-california-residents-have-specific-privacy-rights) +12. [Do Virginia Residents Have Specific Privacy Rights?](#12-do-virginia-residents-have-specific-privacy-rights) +13. [Do We Make Updates to This Notice?](#13-do-we-make-updates-to-this-notice) +14. [Contact Us](#contact-us) + +### 1. What Information Do We Collect? + +#### Personal information You disclose to Us + +***In Short:*** *We collect personal information that You provide to Us.* + +We collect personal information that You voluntarily provide to Us when You register on the Services, express an interest in obtaining information about Us or Our products and Services, when You participate in activities on the Services, or otherwise when You contact Us. + +**Personal Information Provided by You.** The personal information that We collect depends on the context of Your interactions with Us and the Services, the choices You make, and the products and features You use. The personal information We collect may include, but is not limited to, the following: + +- User Account Details, such as the username and email You provided upon sign up. +- Profile information, such as Your gender, birthday, country, and language. +- Contact Preferences, such as if You wish to receive a newsletter We may offer. +- Console identifiers, for authenticating You to the services. +- The IP address(es) You use when connecting to Our services. +- Your primary 'Mii' character. +- Details of Your connected accounts, such as Your Discord and Google account identifiers. + +**Sensitive Information.** We do not process sensitive information. + +**Payment Data.** We may collect data necessary to process Your payment if You make purchases, such as Your payment instrument number, and the security code associated with Your payment instrument. All payment data is stored by Stripe. You may find their privacy notice link(s) here: [https://stripe.com/privacy](https://stripe.com/privacy). + +All personal information that You provide to Us must be true, complete, and accurate, and You must notify Us of any changes to such personal information. + +#### Information automatically collected + +***In Short:*** *Some information — such as Your Internet Protocol (IP) address and/or browser and device characteristics — is collected automatically when You visit Our Services.* + +We may automatically collect certain information when You visit, use, or navigate the Services. This information does not reveal Your specific identity (like Your name or contact information) but may include device and usage information, such as Your IP address, browser and device characteristics, operating system, language preferences, referring URLs, device name, country, location, information about how and when You use Our Services, and other technical information. This information is primarily needed to maintain the security and operation of Our Services, and for Our internal analytics and reporting purposes. + +The information We collect includes: + +- *Log and Usage Data.* Log and usage data is service-related, diagnostic, usage, and performance information Our servers automatically collect when You access or use Our Services and which We record in log files. Depending on how You interact with Us, this log data may include Your IP address, device information, browser type, and settings and information about Your activity in the Services (such as the date/time stamps associated with Your usage, pages and files viewed, searches, and other actions You take such as which features You use), device event information (such as system activity, error reports (sometimes called "crash dumps"), and hardware settings). This information is used to ensure compatibility with devices and locate areas of Our Services which may be having issues. +- *Device Data.* We may collect data about the device You use to access the Services. Depending on the device used, this device data may include information such as Your IP address (or proxy server), device and application identification numbers (console serial numbers), location, browser type, hardware model, and system configuration information. This data is uses for moderation and to ensure valid clients are reaching the expected Services. +- *Location Data.* We do not collect location data, either either precise or imprecise, directly. Games may at times send location based data, for the intent of geolocation and region locking purposes, however this is not stored or processed by Our Services. + +Pretendo Network uses various 3rd party services as part of Our infrastructure. These 3rd parties may collect additional information outside of our control, but are required for the operation of Our Services. Please refer to the relevant parties policies: + +- [Cloudflare](https://www.cloudflare.com/privacypolicy/) +- [Bunny](https://bunny.net/privacy/) +- [Discourse](https://www.discourse.org/privacy) +- [Stripe](https://stripe.com/privacy) +- [Mastodon](https://mastodon.pretendo.network/privacy-policy) + +### 2. How Do We Process Your Information? + +***In Short:*** *We process Your information to provide, improve, and administer Our Services, communicate with You, for security and fraud prevention, and to comply with law. We may also process Your information for other purposes with Your consent.* + +**We process Your personal information for a variety of reasons, depending on how You interact with Our Services, including:** + +- **To facilitate account creation and authentication and otherwise manage user accounts.** We may process Your information so You can create and log in to Your account, as well as keep Your account in working order. +- **To deliver and facilitate delivery of services to the user.** We may process Your information to provide You with the requested service. +- **To respond to user inquiries/offer support to users.** We may process Your information to respond to Your inquiries and solve any potential issues You might have with the requested service. +- **To send administrative information to You.** We may process Your information to send You details about Our products and services, changes to Our terms and policies, and other similar information. +- **To fulfill and manage Your orders.** We may process Your information to fulfill and manage Your orders, payments, returns, and exchanges made through the Services. +- **To enable user-to-user communications.** We may process Your information if You choose to use any of Our offerings that allow for communication with another user. +- **To request feedback.** We may process Your information when necessary to request feedback and to contact You about Your use of Our Services. +- **To protect Our Services.** We may process Your information as part of Our efforts to keep Our Services safe and secure, including fraud monitoring and prevention. +- **To identify usage trends.** We may process information about how You use Our Services to better understand how they are being used so We can improve them. + +### 3. What Legal Bases Do We Rely on to Process Your Personal Information? + +***In Short:*** *We only process Your personal information when We believe it is necessary and We have a valid legal reason (i.e., legal basis) to do so under applicable law, like with Your consent, to comply with laws, to provide You with services to enter into or fulfill Our contractual obligations, to protect Your rights, or to fulfill Our legitimate business interests.* + +***If You are located in the EU or UK, this section applies to You.*** + +The General Data Protection Regulation (GDPR) and UK GDPR require Us to explain the valid legal bases We rely on in order to process Your personal information. As such, We may rely on the following legal bases to process Your personal information: + +- **Consent.** We may process Your information if You have given Us permission (i.e., consent) to use Your personal information for a specific purpose. You can withdraw Your consent at any time. Learn more about [withdrawing Your consent](#9-what-are-your-privacy-rights). +- **Performance of a Contract.** We may process Your personal information when We believe it is necessary to fulfill Our contractual obligations to You, including providing Our Services or at Your request prior to entering into a contract with You. +- **Legitimate Interests.** We may process Your information when We believe it is reasonably necessary to achieve Our legitimate business interests and those interests do not outweigh Your interests and fundamental rights and freedoms. For example, We may process Your personal information for some of the purposes described in order to: + - Analyze how Our Services are used so We can improve them to engage and retain users + - Diagnose problems and/or prevent fraudulent activities + - Understand how Our users use Our products and services so We can improve user experience +- **Legal Obligations.** We may process Your information where We believe it is necessary for compliance with Our legal obligations, such as to cooperate with a law enforcement body or regulatory agency, exercise or defend Our legal rights, or disclose Your information as evidence in litigation in which We are involved. +- **Vital Interests.** We may process Your information where We believe it is necessary to protect Your vital interests or the vital interests of a third party, such as situations involving potential threats to the safety of any person. + +***If You are located in Canada, this section applies to You.*** + +We may process Your information if You have given Us specific permission (i.e., express consent) to use Your personal information for a specific purpose, or in situations where Your permission can be inferred (i.e., implied consent). You can [withdraw Your consent](#9-what-are-your-privacy-rights) at any time. + +In some exceptional cases, We may be legally permitted under applicable law to process Your information without Your consent, including, for example: + +- If collection is clearly in the interests of an individual and consent cannot be obtained in a timely way +- For investigations and fraud detection and prevention +- For business transactions provided certain conditions are met +- If it is contained in a witness statement and the collection is necessary to assess, process, or settle an insurance claim +- For identifying injured, ill, or deceased persons and communicating with next of kin +- If We have reasonable grounds to believe an individual has been, is, or may be victim of financial abuse +- If it is reasonable to expect collection and use with consent would compromise the availability or the accuracy of the information and the collection is reasonable for purposes related to investigating a breach of an agreement or a contravention of the laws of Canada or a province +- If disclosure is required to comply with a subpoena, warrant, court order, or rules of the court relating to the production of records +- If it was produced by an individual in the course of their employment, business, or profession and the collection is consistent with the purposes for which the information was produced +- If the collection is solely for journalistic, artistic, or literary purposes +- If the information is publicly available and is specified by the regulations + +### 4. When and With Whom Do We Share Your Personal Information? + +***In Short:*** *We may share information in specific situations described in this section and/or with the following third parties.* + +We may need to share Your personal information in the following situations: + +- **Other Users.** When You share personal information (for example, by posting comments, contributions, or other content to the Services) or otherwise interact with public areas of the Services, such personal information may be viewed by all users and may be publicly made available outside the Services in perpetuity. Similarly, other users will be able to view descriptions of Your activity, communicate with You within Our Services, and view Your profile. +- **3rd Parties.** When using Our Services, Your data may be automatically collected by the various 3rd party services in use as part of Our infrasture. Pretendo Network does not share or sell Your data to these 3rd parties. The data collected is automatic, through normal usage of Our Services and is required for the operation of Our Services. + +### 5. Do We Use Cookies and Other Tracking Technologies? + +***In Short:*** *We may use cookies and other tracking technologies to collect and store Your information.* + +We may use cookies and similar tracking technologies (like web beacons and pixels) to access or store information. Specific information about how We use such technologies and how You can refuse certain cookies is set out in Our [Cookie Notice](/terms/cookies). + +### 6. Is Your Information Transferred Internationally? + +***In Short:*** *We may transfer, store, and process Your information in countries other than Your own.* + +We operate servers in various countries, including in the United States and Germany. If You are accessing Our Services from outside of the countries where Our Services are operating, please be aware that Your information may be transferred to, stored, and processed by Us in Our facilities and by those third parties with whom We may share Your personal information (see "[When and With Whom Do We Share Your Personal Information?](#4-when-and-with-whom-do-we-share-your-personal-information)" above), in and other countries. + +If You are a resident in the European Economic Area (EEA) or United Kingdom (UK), then these countries may not necessarily have data protection laws or other similar laws as comprehensive as those in Your country. However, We will take all necessary measures to protect Your personal information in accordance with this privacy notice and applicable law. + +### 7. How Long Do We Keep Your Information? + +***In Short:*** *We keep Your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.* + +We will only keep Your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting, or other legal requirements). No purpose in this notice will require Us keeping Your personal information for longer than the period of time in which users have an account with Us. + +When We have no ongoing legitimate business need to process Your personal information, We will either delete or anonymize such information, or, if this is not possible (for example, because Your personal information has been stored in backup archives), then We will securely store Your personal information and isolate it from any further processing until deletion is possible. + +### 8. How Do We Keep Your Information Safe? + +***In Short:*** *We aim to protect Your personal information through a system of organizational and technical security measures.* + +We have implemented appropriate and reasonable technical and organizational security measures designed to protect the security of any personal information We process. However, despite Our safeguards and efforts to secure Your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so We cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat Our security and improperly collect, access, steal, or modify Your information. Although We will do Our best to protect Your personal information, transmission of personal information to and from Our Services is at Your own risk. You should only access the Services within a secure environment. + +### 9. What Are Your Privacy Rights? + +***In Short:*** *In some regions, such as the European Economic Area (EEA), United Kingdom (UK), and Canada, You have rights that allow You greater access to and control over Your personal information. You may review, change, or terminate Your account at any time. These rights are extended to all users regardless of region.* + +In some regions (like the EEA, UK, and Canada), You have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of Your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of Your personal information; and (iv) if applicable, to data portability. In certain circumstances, You may also have the right to object to the processing of Your personal information. You can make such a request by contacting Us by using the contact details provided in the section "[Contact Us](#contact-us)" below. + +We will consider and act upon any request in accordance with applicable data protection laws. + +If You are located in the EEA or UK and You believe We are unlawfully processing Your personal information, You also have the right to complain to Your [Member State data protection authority](https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm) or [UK data protection authority](https://ico.org.uk/make-a-complaint/data-protection-complaints/data-protection-complaints/). + +If You are located in Switzerland, You may contact the [Federal Data Protection and Information Commissioner](https://www.edoeb.admin.ch/edoeb/en/home.html). + +**Withdrawing Your consent:** If We are relying on Your consent to process Your personal information, which may be express and/or implied consent depending on the applicable law, You have the right to withdraw Your consent at any time. You can withdraw Your consent at any time by contacting Us by using the contact details provided in the section "[Contact Us](#contact-us)" below. + +However, please note that this will not affect the lawfulness of the processing before its withdrawal nor, when applicable law allows, will it affect the processing of Your personal information conducted in reliance on lawful processing grounds other than consent. + +#### Account Information + +If You would at any time like to review or change the information in Your account or terminate Your account, You can: + +- Use the provided methods of managing Your account on Your given game console. +- Contact Us using the contact information provided. + +Upon Your request to terminate Your account, We will deactivate or delete Your information from Our active databases. However, We may retain some information in Our files to prevent fraud, troubleshoot problems, assist with any investigations, enforce Our legal terms and/or comply with applicable legal requirements. We may also retain some account information, such as both the account usernames and Your account principal ID, in order to prevent reallocation and for various system requirements. + +**Cookies and similar technologies:** Most Web browsers are set to accept cookies by default. If You prefer, You can usually choose to set Your browser to remove cookies and to reject cookies. If You choose to remove cookies or reject cookies, this could affect certain features or services of Our Services. + +### 10. Controls for Do-Not-Track Features + +Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting You can activate to signal Your privacy preference not to have data about Your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, We do not currently respond to DNT browser signals or any other mechanism that automatically communicates Your choice not to be tracked online. If a standard for online tracking is adopted that We must follow in the future, We will inform You about that practice in a revised version of this privacy notice. + +### 11. Do California Residents Have Specific Privacy Rights? + +***In Short:*** *Yes, if You are a resident of California, You are granted specific rights regarding access to Your personal information. These rights are extended to all users regardless of region.* + +California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits Our users who are California residents to request and obtain from Us, once a year and free of charge, information about categories of personal information (if any) We disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which We shared personal information in the immediately preceding calendar year. If You would like to make such a request, please submit Your request in writing to Us using the contact information provided below. + +If You are under 18 years of age, reside in California, and have a registered account with Services, You have the right to request removal of unwanted data that You publicly post on the Services. To request removal of such data, please contact Us using the contact information provided below and include the email address associated with Your account and a statement that You reside in California. We will make sure the data is not publicly displayed on the Services, but please be aware that the data may not be completely or comprehensively removed from all Our systems (e.g., backups, etc.). + +#### CCPA Privacy Notice + +The California Code of Regulations defines a "resident" as: + +(1) every individual who is in the State of California for other than a temporary or transitory purpose and + +(2) every individual who is domiciled in the State of California who is outside the State of California for a temporary or transitory purpose + +All other individuals are defined as "non-residents." + +The rights described above are extended to all users regardless of California residency. + +**What categories of personal information do We collect?** + +We have collected the following categories of personal information in the past twelve (12) months: + +| **Category*- | **Examples*- | **Collected** | +| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| A. Identifiers | Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name | YES | +| B. Personal information categories listed in the California Customer Records statute | Name, contact information, education, employment, employment history, and financial information | NO | +| C. Protected classification characteristics under California or federal law | Gender and date of birth | YES | +| D. Commercial information | Transaction information, purchase history, financial details, and payment information | YES | +| E. Biometric information | Fingerprints and voiceprints | NO | +| F. Internet or other similar network activity | Browsing history, search history, online behavior, interest data, and interactions with Our and other websites, applications, systems, and advertisements | NO | +| G. Geolocation data | Device location | NO | +| H. Audio, electronic, visual, thermal, olfactory, or similar information | Images and audio, video or call recordings created in connection with Our business activities | NO | +| I. Professional or employment-related information | Business contact details in order to provide You Our Services at a business level or job title, work history, and professional qualifications if You apply for a job with Us | NO | +| J. Education Information | Student records and directory information | NO | +| K. Inferences drawn from other personal information | Inferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual's preferences and characteristics | NO | +| L. Sensitive Personal Information | | NO | + +We will use and retain the collected personal information as needed to provide the Services or for: + +- Category A - As long as the user has an account with Us +- Category C - As long as the user has an account with Us +- Category D - As long as the user has an account with Us + +We may also collect other personal information outside of these categories through instances where You interact with Us in person, online, or by phone or mail in the context of: + +- Receiving help through Our customer support channels; +- Participation in customer surveys or contests; and +- Facilitation in the delivery of Our Services and to respond to Your inquiries. + +**How do We use and share Your personal information?** + +More information about Our data collection and sharing practices can be found in this privacy notice. + +You may contact Us or by referring to the contact details at the bottom of this document. + +If You are using an authorized agent to exercise Your right to opt out We may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on Your behalf. + +**Will Your information be shared with anyone else?** + +We will not directly share Your information with any 3rd parties outside of the automatic data collection implemented by the 3rd parties as part of Our infrastructure. + +We have not disclosed, sold, or shared any personal information to third parties for a business or commercial purpose in the preceding twelve (12) months. We will not sell or share personal information in the future belonging to Service users, website visitors, users, and other consumers. + +**Your rights with respect to Your personal data** + +*Right to request deletion of the data — Request to delete* + +You can ask for the deletion of Your personal information. If You ask Us to delete Your personal information, We will respect Your request and delete Your personal information, subject to certain exceptions provided by law, such as (but not limited to) the exercise by another consumer of his or her right to free speech, Our compliance requirements resulting from a legal obligation, or any processing that may be required to protect against illegal activities. Additionally, we operate several archives of historical data prior to the shutdown of Nintendo Network. The data held in these archives may be viewed publicly and are exempt from various GDPR and related laws regarding data deletion as they are archived for the interest of the public. See each archives respective policies for how dtaa retention is handled. + +*Right to be informed — Request to know* + +Depending on the circumstances, You have a right to know: + +- whether We collect and use Your personal information; +- the categories of personal information that We collect; +- the purposes for which the collected personal information is used; +- whether We sell or share personal information to third parties; +- the categories of personal information that We sold, shared, or disclosed for a business purpose; +- the categories of third parties to whom the personal information was sold, shared, or disclosed for a business purpose; +- the business or commercial purpose for collecting, selling, or sharing personal information; and +- the specific pieces of personal information We collected about You. + +In accordance with applicable law, We are not obligated to provide or delete consumer information that is de-identified in response to a consumer request or to re-identify individual data to verify a consumer request. + +*Right to Non-Discrimination for the Exercise of a Consumer's Privacy Rights* + +We will not discriminate against You if You exercise Your privacy rights. + +*Right to Limit Use and Disclosure of Sensitive Personal Information* + +We do not process consumer's sensitive personal information. + +*Verification process* + +Upon receiving Your request, We will need to verify Your identity to determine You are the same person about whom We have the information in Our system. These verification efforts require Us to ask You to provide information so that We can match it with information You have previously provided Us. For instance, depending on the type of request You submit, We may ask You to provide certain information so that We can match the information You provide with the information We already have on file, or We may contact You through a communication method (e.g., email) that You have previously provided to Us. We may also use other verification methods as the circumstances dictate. + +We will only use personal information provided in Your request to verify Your identity or authority to make the request. To the extent possible, We will avoid requesting additional information from You for the purposes of verification. However, if We cannot verify Your identity from the information already maintained by Us, We may request that You provide additional information for the purposes of verifying Your identity and for security or fraud-prevention purposes. We will delete such additionally provided information as soon as We finish verifying You. + +*Other privacy rights* + +- You may object to the processing of Your personal information. +- You may request correction of Your personal data if it is incorrect or no longer relevant, or ask to restrict the processing of the information. +- You can designate an authorized agent to make a request under the CCPA on Your behalf. We may deny a request from an authorized agent that does not submit proof that they have been validly authorized to act on Your behalf in accordance with the CCPA. +- You may request to opt out from future selling or sharing of Your personal information to third parties. Upon receiving an opt-out request, We will act upon the request as soon as feasibly possible, but no later than fifteen (15) days from the date of the request submission. + +To exercise these rights, You can contact Us or by referring to the contact details at the bottom of this document. If You have a complaint about how We handle Your data, We would like to hear from You. + +### 12. Do Virginia Residents Have Specific Privacy Rights? + +***In Short:** Yes, if You are a resident of Virginia, You may be granted specific rights regarding access to and use of Your personal information. These rights are extended to all users regardless of region.* + +**Virginia CDPA Privacy Notice** + +Under the Virginia Consumer Data Protection Act (CDPA): + +"Consumer" means a natural person who is a resident of the Commonwealth acting only in an individual or household context. It does not include a natural person acting in a commercial or employment context. + +"Personal data" means any information that is linked or reasonably linkable to an identified or identifiable natural person. "Personal data" does not include de-identified data or publicly available information. + +"Sale of personal data" means the exchange of personal data for monetary consideration. + +If this definition "consumer" applies to You, We must adhere to certain rights and obligations regarding Your personal data. + +The information We collect, use, and disclose about You will vary depending on how You interact with Us and Our Services. To find out more, please visit the following links: + +- [Personal data We collect](#1-what-information-do-we-collect) +- [How We use Your personal data](#2-how-do-we-process-your-information) +- [When and with whom We share Your personal data](#4-when-and-with-whom-do-we-share-your-personal-information) + +*Your rights with respect to Your personal data* + +- Right to be informed whether or not We are processing Your personal data +- Right to access Your personal data +- Right to correct inaccuracies in Your personal data +- Right to request deletion of Your personal data +- Right to obtain a copy of the personal data You previously shared with Us +- Right to opt out of the processing of Your personal data if it is used for targeted advertising, the sale of personal data, or profiling in furtherance of decisions that produce legal or similarly significant effects ("profiling") + +We will not directly share Your information with any 3rd parties outside of the automatic data collection implemented by the 3rd parties as part of Our infrastructure. + +We have not sold any personal data to third parties for business or commercial purposes. We will not sell personal data in the future belonging to Service users, website visitors, users, and other consumers. + +*Exercise Your rights provided under the Virginia CDPA* + +More information about Our data collection and sharing practices can be found in this privacy notice. + +You may contact Us by referring to the contact details at the bottom of this document. + +If You are using an authorized agent to exercise Your rights, We may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on Your behalf. + +*Verification process* + +We may request that You provide additional information reasonably necessary to verify You and Your consumer's request. If You submit the request through an authorized agent, We may need to collect additional information to verify Your identity before processing Your request. + +Upon receiving Your request, We will respond without undue delay, but in all cases, within forty-five (45) days of receipt. The response period may be extended once by forty-five (45) additional days when reasonably necessary. We will inform You of any such extension within the initial 45-day response period, together with the reason for the extension. + +*Right to appeal* + +If We decline to take action regarding Your request, We will inform You of Our decision and reasoning behind it. If You wish to appeal Our decision, please email Us at privacy@pretendo.network. Within sixty (60) days of receipt of an appeal, We will inform You in writing of any action taken or not taken in response to the appeal, including a written explanation of the reasons for the decisions. If Your appeal if denied, You may contact the [Attorney General to submit a complaint](https://www.oag.state.va.Us/consumer-protection/index.php/file-a-complaint). + +### 13. Do We Make Updates to This Notice? + +***In Short:** Yes, We will update this notice as necessary to stay compliant with relevant laws.* + +We may update this privacy notice from time to time. The updated version will be indicated by an updated "Revised" date and the updated version will be effective as soon as it is accessible. If We make material changes to this privacy notice, We may notify You either by prominently posting a notice of such changes or by directly sending You a notification. We encourage You to review this privacy notice frequently to be informed of how We are protecting Your information. + +## Modifications to the Policy + +We may update this Privacy Policy from time to time. We will notify You of any changes by updating the "Last updated" date at the top of this policy. We may also notify You of any changes via email. You are advised to review this page periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page. + +### Contact Us + +If You have any questions about this policy, You can contact Us: + +- By email: privacy@pretendo.network diff --git a/views/404.handlebars b/views/404.handlebars new file mode 100644 index 0000000..3a49409 --- /dev/null +++ b/views/404.handlebars @@ -0,0 +1,10 @@ + + +{{> header}} + +
+
404
+
{{ locale.notfound.description }}
+ + {{> footer }} +
\ No newline at end of file diff --git a/views/account/account.handlebars b/views/account/account.handlebars index 24f07e2..bb20b75 100644 --- a/views/account/account.handlebars +++ b/views/account/account.handlebars @@ -28,6 +28,9 @@

{{ locale.account.settings.upgrade }}

+ +

{{ locale.account.settings.delete.button }}

+
@@ -148,7 +151,7 @@

{{ locale.account.settings.settingCards.discord }}

{{#if discordUser}} -

{{ locale.account.settings.settingCards.connectedToDiscord }} {{ discordUser.username }}#{{ discordUser.discriminator }}

+

{{ locale.account.settings.settingCards.connectedToDiscord }} {{ discordUser.username }}{{#if ( neq discordUser.discriminator '0' ) }}#{{ discordUser.discriminator }}{{/if}}

@@ -198,6 +201,20 @@
+ + {{#section 'foot'}} {{/section}} diff --git a/views/account/forgot-password.handlebars b/views/account/forgot-password.handlebars index 1a4f540..101a6d7 100644 --- a/views/account/forgot-password.handlebars +++ b/views/account/forgot-password.handlebars @@ -1,17 +1,21 @@ - +{{#section 'head'}} + + +{{/section}} {{> header}}
- \ No newline at end of file +{{#if success_message}} + +{{/if}} + +{{#if error_message}} + +{{/if}} \ No newline at end of file diff --git a/views/account/login.handlebars b/views/account/login.handlebars index ce234d0..79afa97 100644 --- a/views/account/login.handlebars +++ b/views/account/login.handlebars @@ -5,9 +5,8 @@ {{> header}}
- diff --git a/views/account/register.handlebars b/views/account/register.handlebars index ba3fbbb..e4be193 100644 --- a/views/account/register.handlebars +++ b/views/account/register.handlebars @@ -23,13 +23,18 @@
+
+ {{! TODO - Add this to weblate, hard-coding for now to just push it out }} + +
+
- +
- +
diff --git a/views/account/upgrade.handlebars b/views/account/upgrade.handlebars index 73c398a..4ac5561 100644 --- a/views/account/upgrade.handlebars +++ b/views/account/upgrade.handlebars @@ -112,5 +112,5 @@ .replace('${perc}', '{{donationCache.completed_real}}'); - {{/section}} diff --git a/views/docs/search.handlebars b/views/docs/search.handlebars index 9298898..65b8339 100644 --- a/views/docs/search.handlebars +++ b/views/docs/search.handlebars @@ -45,12 +45,11 @@

{{ locale.docs.search.caption }}

- +
- @@ -58,30 +57,14 @@ {{#section 'foot'}} - - + + +{{/section}}