diff --git a/.dockerignore b/.dockerignore index 9d9d0206..9ff96283 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,3 +2,5 @@ **/.git **/.env **/.idea +.git/ +*.md diff --git a/.env.example b/.env.example deleted file mode 100644 index 392f2afa..00000000 --- a/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -CLOUDFLARE_API_TOKEN= -NEON_API_TOKEN= diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index ba3d6a01..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,16 +0,0 @@ -* @dev-team - -/apps/ @victorpahuus @AquaWolf -/packages/ui/ @wanjohiryan @victorpahuus @AquaWolf - -/protobufs/ @AquaWolf @DatCaptainHorse - -/infra/ @wanjohiryan -/packages/core/ @wanjohiryan -/packages/functions/ @wanjohiryan - -/containerfiles/ @DatCaptainHorse -/packages/server/ @DatCaptainHorse -/packages/relay/ @DatCaptainHorse -/packages/scripts/ @DatCaptainHorse -/packages/input/ @DatCaptainHorse \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index ba8dc9b2..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -polar: nestri \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index e6115618..00000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,2 +0,0 @@ -## Description - diff --git a/.github/workflows/docker-bake.hcl b/.github/workflows/docker-bake.hcl deleted file mode 100644 index 27a16aaf..00000000 --- a/.github/workflows/docker-bake.hcl +++ /dev/null @@ -1,32 +0,0 @@ -variable "BASE_IMAGE" { - default = "docker.io/cachyos/cachyos:latest" -} - -group "default" { - targets = ["runner-base", "runner-builder"] -} - -target "runner-base" { - dockerfile = "containerfiles/runner-base.Containerfile" - context = "." - args = { - BASE_IMAGE = BASE_IMAGE - } - cache-from = ["type=gha,scope=runner-base-pr"] - cache-to = ["type=gha,scope=runner-base-pr,mode=max"] - tags = ["runner-base:latest"] -} - -target "runner-builder" { - dockerfile = "containerfiles/runner-builder.Containerfile" - context = "." - args = { - RUNNER_BASE_IMAGE = "runner-base:latest" - } - cache-from = ["type=gha,scope=runner-builder-pr"] - cache-to = ["type=gha,scope=runner-builder-pr,mode=max"] - tags = ["runner-builder:latest"] - contexts = { - runner-base = "target:runner-base" - } -} diff --git a/.github/workflows/play-standalone.yml b/.github/workflows/play-standalone.yml deleted file mode 100644 index 155d58a8..00000000 --- a/.github/workflows/play-standalone.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: Build Nestri standalone playsite - -on: - pull_request: - paths: - - "containerfiles/playsite.Containerfile" - - ".github/workflows/play-standalone.yml" - - "packages/play-standalone/**" - - "packages/input/**" - push: - branches: [ dev, production ] - paths: - - "containerfiles/playsite.Containerfile" - - ".github/workflows/play-standalone.yml" - - "packages/play-standalone/**" - - "packages/input/**" - tags: - - v*.*.* - release: - types: [ created ] - -env: - REGISTRY: ghcr.io - IMAGE_NAME: nestrilabs/nestri - BASE_TAG_PREFIX: playsite - -jobs: - build-docker-pr: - name: Build image on PR - runs-on: ubuntu-latest - if: ${{ github.event_name == 'pull_request' }} - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build Docker image - uses: docker/build-push-action@v5 - with: - file: containerfiles/playsite.Containerfile - context: ./ - push: false - load: true - tags: nestri:playsite - - build-and-push-docker: - name: Build and push image - if: ${{ github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/production' }} - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - name: Log into registry ${{ env.REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ github.token }} - - name: Extract Container metadata - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.BASE_TAG_PREFIX }} - # - #tag on release, and a nightly build for 'dev' - tags: | - type=raw,value=nightly,enable={{is_default_branch}} - type=raw,value={{branch}} - type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'production') }} - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - - name: Build Docker image - uses: docker/build-push-action@v5 - with: - file: containerfiles/playsite.Containerfile - context: ./ - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/relay.yml b/.github/workflows/relay.yml deleted file mode 100644 index 97eec1cf..00000000 --- a/.github/workflows/relay.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: Build Nestri relay - -on: - pull_request: - paths: - - "containerfiles/relay.Containerfile" - - "packages/relay/**" - - ".github/workflows/relay.yml" - push: - branches: [dev, production] - paths: - - "containerfiles/relay.Containerfile" - - ".github/workflows/relay.yml" - - "packages/relay/**" - tags: - - v*.*.* - release: - types: [created] - -env: - REGISTRY: ghcr.io - IMAGE_NAME: nestrilabs/nestri - BASE_TAG_PREFIX: relay - -jobs: - build-docker-pr: - name: Build image on PR - runs-on: ubuntu-latest - if: ${{ github.event_name == 'pull_request' }} - steps: - - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build Docker image - uses: docker/build-push-action@v5 - with: - file: containerfiles/relay.Containerfile - context: ./ - push: false - load: true - tags: nestri:relay - - build-and-push-docker: - name: Build and push image - if: ${{ github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/production' }} - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Log into registry ${{ env.REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ github.token }} - - - name: Extract Container metadata - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.BASE_TAG_PREFIX }} - # - #tag on release, and a nightly build for 'dev' - tags: | - type=raw,value=nightly,enable={{is_default_branch}} - type=raw,value={{branch}} - type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'production') }} - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - - - name: Build Docker image - uses: docker/build-push-action@v5 - with: - file: containerfiles/relay.Containerfile - context: ./ - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/runner-bases.yml b/.github/workflows/runner-bases.yml deleted file mode 100644 index d6eba638..00000000 --- a/.github/workflows/runner-bases.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: Build Nestri runner base images - -on: [ workflow_call ] - -env: - REGISTRY: ghcr.io - IMAGE_NAME: nestrilabs/nestri - BASE_IMAGE: docker.io/cachyos/cachyos:latest - -jobs: - build-and-push-bases: - name: Build and push images - if: ${{ github.ref == 'refs/heads/production' || github.ref == 'refs/heads/dev' }} - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - strategy: - matrix: - variant: - - { suffix: "v2", base: "docker.io/cachyos/cachyos:latest" } - - { suffix: "v3", base: "docker.io/cachyos/cachyos-v3:latest" } - #- { suffix: "v4", base: "docker.io/cachyos/cachyos-v4:latest" } # Disabled until GHA has this - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - name: Log into registry ${{ env.REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ github.token }} - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Set Swap Space - uses: pierotofy/set-swap-space@master - with: - swap-size-gb: 20 - - name: Build and push runner-base image - uses: docker/build-push-action@v6 - with: - file: containerfiles/runner-base.Containerfile - context: ./ - push: true - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-base:latest-${{ matrix.variant.suffix }} - build-args: | - BASE_IMAGE=${{ matrix.variant.base }} - cache-from: type=gha,scope=runner-base-${{ matrix.variant.suffix }},mode=max - cache-to: type=gha,scope=runner-base-${{ matrix.variant.suffix }},mode=max - pull: true - - name: Build and push runner-builder image - uses: docker/build-push-action@v6 - with: - file: containerfiles/runner-builder.Containerfile - context: ./ - push: true - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-builder:latest-${{ matrix.variant.suffix }} - build-args: | - RUNNER_BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-base:latest-${{ matrix.variant.suffix }} - cache-from: type=gha,scope=runner-builder-${{ matrix.variant.suffix }},mode=max - cache-to: type=gha,scope=runner-builder-${{ matrix.variant.suffix }},mode=max - - name: Build and push runner-common image - uses: docker/build-push-action@v6 - with: - file: containerfiles/runner-common.Containerfile - context: ./ - push: true - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-common:latest-${{ matrix.variant.suffix }} - build-args: | - RUNNER_BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-base:latest-${{ matrix.variant.suffix }} - RUNNER_BUILDER_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-builder:latest-${{ matrix.variant.suffix }} - cache-from: type=gha,scope=runner-common-${{ matrix.variant.suffix }},mode=max - cache-to: type=gha,scope=runner-common-${{ matrix.variant.suffix }},mode=max diff --git a/.github/workflows/runner-variants.yml b/.github/workflows/runner-variants.yml deleted file mode 100644 index db0a89a1..00000000 --- a/.github/workflows/runner-variants.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: Build Nestri runner image variants - -on: - workflow_dispatch: - schedule: - - cron: 7 0 * * 1,3,6 # Nightlies - push: - branches: [ dev, production ] - paths: - - "containerfiles/*runner.Containerfile" - - ".github/workflows/runner-variants.yml" - - "packages/scripts/**" - - "packages/configs/**" - tags: - - v*.*.* - release: - types: [ created ] - -env: - REGISTRY: ghcr.io - IMAGE_NAME: nestrilabs/nestri - -jobs: - bases: - uses: ./.github/workflows/runner-bases.yml - permissions: - contents: read - packages: write - build-and-push-variants: - needs: [ bases ] - name: Build and push images - if: ${{ github.ref == 'refs/heads/production' || github.ref == 'refs/heads/dev' }} - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - strategy: - matrix: - variant: - - { suffix: "v2", base: "docker.io/cachyos/cachyos:latest" } - - { suffix: "v3", base: "docker.io/cachyos/cachyos-v3:latest" } - #- { suffix: "v4", base: "docker.io/cachyos/cachyos-v4:latest" } # Disabled until GHA has this - runner: - - steam - - heroic - - minecraft - # ADD MORE HERE AS NEEDED # - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - name: Log into registry ${{ env.REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ github.token }} - - name: Extract runner metadata - id: meta-runner - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner - tags: | - type=raw,value=nightly-${{ matrix.runner }}-${{ matrix.variant.suffix }},enable={{is_default_branch}} - type=raw,value={{branch}}-${{ matrix.runner }}-${{ matrix.variant.suffix }} - type=raw,value=latest-${{ matrix.runner }}-${{ matrix.variant.suffix }},enable=${{ github.ref == format('refs/heads/{0}', 'production') }} - type=semver,pattern={{version}}-${{ matrix.runner }}-${{ matrix.variant.suffix }} - type=semver,pattern={{major}}.{{minor}}-${{ matrix.runner }}-${{ matrix.variant.suffix }} - type=semver,pattern={{major}}-${{ matrix.runner }}-${{ matrix.variant.suffix }} - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Set Swap Space - uses: pierotofy/set-swap-space@master - with: - swap-size-gb: 20 - - name: Build and push runner image - uses: docker/build-push-action@v6 - with: - file: containerfiles/${{ matrix.runner }}-runner.Containerfile - context: ./ - push: true - tags: ${{ steps.meta-runner.outputs.tags }} - labels: ${{ steps.meta-runner.outputs.labels }} - build-args: | - RUNNER_COMMON_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/runner-common:latest-${{ matrix.variant.suffix }} - cache-from: type=gha,scope=runner-${{ matrix.runner }}-${{ matrix.variant.suffix }},mode=max - cache-to: type=gha,scope=runner-${{ matrix.runner }}-${{ matrix.variant.suffix }},mode=max diff --git a/.gitignore b/.gitignore index 078e0280..68783ada 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,6 @@ coverage # Build Outputs .next/ out/ -build dist @@ -55,4 +54,4 @@ target tmp .partykit -key_* \ No newline at end of file +key_* diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 9b0fcd07..00000000 --- a/LICENSE +++ /dev/null @@ -1,671 +0,0 @@ -Copyright (c) 2023-present Nestri Labs, Inc. - -Portions of this software are licensed as follows: - -* All content that resides under https://github.com/nestrilabs/nestri/tree/dev/cloud and -https://github.com/nestrilabs/nestri/tree/production/cloud directory of this repository (Commercial License) is licensed under the license defined in "cloud/LICENSE". -* All third party components incorporated into the Nestri Software are licensed under the original license provided by the owner of the applicable component. -* Content outside of the above mentioned directories or restrictions above is available under the "AGPLv3" license as defined below. - - - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - Nestri: Your games, Your rules - Copyright (C) 2023 WanjohiRyan - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/README.md b/README.md deleted file mode 100644 index 0426825d..00000000 --- a/README.md +++ /dev/null @@ -1,23 +0,0 @@ -

- - - - - Nestri logo - - -

-

Deploy and stream games/apps in the cloud. Use our GPUs or bring your own.

-

- Discord - Nestri License - Build status - -

- - - - - diff --git a/buf.gen.yaml b/buf.gen.yaml deleted file mode 100644 index 3d6886c8..00000000 --- a/buf.gen.yaml +++ /dev/null @@ -1,18 +0,0 @@ -version: v2 -inputs: - - directory: protobufs -plugins: - # TypeScript (frontend) - - remote: buf.build/bufbuild/es - out: packages/input/src/proto - opt: target=ts - - # Golang (relay) - - remote: buf.build/protocolbuffers/go - out: packages/relay/internal/proto - opt: paths=source_relative - - # Rust (nestri-server) - - remote: buf.build/community/neoeinstein-prost - out: packages/server/src/proto - opt: flat_output_dir=true diff --git a/build/Dockerfile b/build/Dockerfile new file mode 100644 index 00000000..35683e86 --- /dev/null +++ b/build/Dockerfile @@ -0,0 +1,484 @@ +# syntax=docker/dockerfile:1 +# ============================================================================= +# Nestri – Unified Multi-stage Build +# ============================================================================= +# +# Build graph (BuildKit runs independent branches in parallel): +# +# initial ─► builder ──┬─► libkrunfw-build ─► libkrun-build ──┐ +# ├─► virgl-build ───────────────────────┤ +# ├─► mesa-build ─► lib32-mesa-build │ +# │ │ +# └─► rust-builder ─┬─► gst-wayland-build +# ├─► wl-proxy-build +# ├─► nestrisink-build +# └─► muvm-build ◄─────┘ +# +# initial ─► runner ◄── all build stages +# +# Build: +# docker buildx build --target runner -t nestri:latest . +# +# Recommended .dockerignore: +# target/ +# .git/ +# *.md +# +# ============================================================================= + + +#****************************************************************************** +# initial +#****************************************************************************** +# Minimal updated Arch Linux base. Every other stage inherits from here. +FROM docker.io/archlinux/archlinux:latest AS initial + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -Syu --noconfirm + + +#****************************************************************************** +# builder +#****************************************************************************** +# builder has C/C++ tooling, makepkg, and a non-root build user. +FROM initial AS builder + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm \ + base-devel \ + clang \ + cmake \ + git \ + meson \ + ninja \ + python \ + pkg-config + +WORKDIR /scratch + +ENV ARTIFACTS=/artifacts +RUN mkdir -p "$ARTIFACTS" + +# makepkg refuses to run as root +RUN useradd -m builder \ + && echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + +# Maximise build parallelism +RUN sed -i "s/#MAKEFLAGS=.*/MAKEFLAGS=\"-j$(nproc)\"/" /etc/makepkg.conf + +# Let the builder user write to /scratch and /artifacts +RUN chgrp builder /scratch "$ARTIFACTS" \ + && chmod g+ws /scratch "$ARTIFACTS" + + +#****************************************************************************** +# rust-builder +#****************************************************************************** +# rust-builder adds the Rust toolchain and common crate build deps. +FROM builder AS rust-builder + +ENV CARGO_HOME=/usr/local/cargo +ENV PATH="${CARGO_HOME}/bin:${PATH}" + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm \ + rust \ + cargo \ + gstreamer \ + gst-plugins-base \ + gst-plugins-good \ + gst-plugins-bad \ + libdrm \ + libxkbcommon \ + wayland \ + wayland-protocols \ + libinput \ + libseccomp \ + libcap + +# cargo-c is needed by gst-wayland-display (cargo cinstall) +RUN --mount=type=cache,target=${CARGO_HOME}/registry \ + --mount=type=cache,target=${CARGO_HOME}/git \ + cargo install cargo-c + + +#****************************************************************************** +# libkrunfw-build +#****************************************************************************** +# Build libkrunfw package with 32-bit support. +FROM builder AS libkrunfw-build + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed \ + bc \ + python-pyelftools \ + cpio \ + curl \ + wget + +COPY build/packages/libkrunfw/ /scratch/libkrunfw/ +WORKDIR /scratch/libkrunfw + +RUN chown -R builder:builder . +USER builder +RUN makepkg --syncdeps --noconfirm --skippgpcheck \ + && cp *.zst "$ARTIFACTS" + + +#****************************************************************************** +# libkrun-build +#****************************************************************************** +# Build libkrun package (depends on libkrunfw). +FROM builder AS libkrun-build + +# Install previously-built libkrunfw +WORKDIR /scratch +COPY --from=libkrunfw-build /artifacts/*.zst pkgs/ +RUN pacman -U --noconfirm pkgs/*.zst && rm -rf pkgs + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed \ + rust \ + cargo \ + patchelf \ + clang \ + clang18 \ + pipewire \ + virglrenderer + +COPY build/packages/libkrun/ /scratch/libkrun/ +WORKDIR /scratch/libkrun + +RUN chown -R builder:builder . +USER builder +# NOTE: clang18 required – newer versions fail to build libkrun +RUN LIBCLANG_PATH=/usr/lib/llvm18/lib \ + makepkg --syncdeps --noconfirm --skippgpcheck \ + && cp *.zst "$ARTIFACTS" + + +#****************************************************************************** +# virgl-build +#****************************************************************************** +# Build virglrenderer package. +FROM builder AS virgl-build + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed \ + python-yaml \ + libepoxy \ + mesa \ + libva \ + libdrm \ + vulkan-headers \ + vulkan-icd-loader \ + libx11 \ + glu + +COPY build/virglrenderer/ /scratch/virglrenderer/ +WORKDIR /scratch/virglrenderer + +RUN chown -R builder:builder . +USER builder +RUN makepkg --syncdeps --noconfirm --skippgpcheck --skipinteg \ + && cp *.zst "$ARTIFACTS" + + +#****************************************************************************** +# mesa-build +#****************************************************************************** +# Build Mesa packages (64-bit). +FROM builder AS mesa-build + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed \ + git \ + python-mako \ + python-packaging \ + python-yaml \ + llvm \ + rust \ + rust-bindgen \ + cbindgen \ + clang \ + glslang \ + wayland-protocols \ + libvdpau \ + libva \ + libxrandr + +COPY build/mesa/ /scratch/mesa/ +WORKDIR /scratch/mesa + +RUN chown -R builder:builder . +USER builder +RUN makepkg --syncdeps --noconfirm --skippgpcheck --skipinteg \ + && cp *.zst "$ARTIFACTS" + + +#****************************************************************************** +# lib32-mesa-build +#****************************************************************************** +# Build 32-bit Mesa packages (depends on 64-bit mesa). +FROM builder AS lib32-mesa-build + +# Enable multilib repository for 32-bit dependencies +RUN echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist" \ + >> /etc/pacman.conf + +# Install 64-bit mesa packages first +WORKDIR /scratch +COPY --from=mesa-build /artifacts/*.zst pkgs/ +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -Syu --noconfirm \ + && pacman -U --noconfirm pkgs/*.zst \ + && rm -rf pkgs + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed \ + git \ + python-mako \ + python-packaging \ + python-yaml \ + llvm \ + rust \ + rust-bindgen \ + cbindgen \ + clang \ + glslang \ + wayland-protocols \ + libvdpau \ + libva \ + libxrandr \ + lib32-gcc-libs \ + lib32-libx11 \ + lib32-libdrm \ + lib32-llvm \ + lib32-expat \ + lib32-libelf \ + lib32-zstd \ + lib32-wayland + +COPY build/packages/lib32-mesa/ /scratch/lib32-mesa/ +WORKDIR /scratch/lib32-mesa + +RUN chown -R builder:builder . +USER builder +RUN makepkg --syncdeps --noconfirm --skippgpcheck --skipinteg \ + && cp *.zst "$ARTIFACTS" + + +#****************************************************************************** +# gst-wayland-build +#****************************************************************************** +# Build gst-wayland-display plugin. +FROM rust-builder AS gst-wayland-build + +WORKDIR /scratch/gst-wayland-display +RUN git clone https://github.com/games-on-whales/gst-wayland-display.git . \ + && git checkout 67b1183997fd7aaf57398e4b01bd64c4d2433c45 + +RUN --mount=type=cache,target=${CARGO_HOME}/registry \ + --mount=type=cache,target=${CARGO_HOME}/git \ + --mount=type=cache,target=/scratch/gst-wayland-display/target \ + cargo cinstall --prefix="${ARTIFACTS}/usr" --release --features cuda + + +#****************************************************************************** +# wl-proxy-build +#****************************************************************************** +# Build wl-cross-domain-proxy. +FROM rust-builder AS wl-proxy-build + +WORKDIR /scratch/wl-cross-domain-proxy +RUN git clone https://codeberg.org/drakulix/wl-cross-domain-proxy.git . \ + && git checkout c6ce1ca89fb4d6f4f18d3aaf88324d40d4589177 + +RUN --mount=type=cache,target=${CARGO_HOME}/registry \ + --mount=type=cache,target=${CARGO_HOME}/git \ + --mount=type=cache,target=/scratch/wl-cross-domain-proxy/target \ + cargo build --release \ + && install -Dm755 target/release/wl-cross-domain-proxy \ + "${ARTIFACTS}/usr/bin/wl-cross-domain-proxy" + + +#****************************************************************************** +# nestrisink-build +#****************************************************************************** +# Build nestri GStreamer sink plugin. +FROM rust-builder AS nestrisink-build + +WORKDIR /scratch/nestrisink +COPY Cargo.toml Cargo.lock ./ +COPY crates/ ./crates/ +COPY apps/ ./apps/ + +RUN --mount=type=cache,target=${CARGO_HOME}/registry \ + --mount=type=cache,target=${CARGO_HOME}/git \ + --mount=type=cache,target=/scratch/nestrisink/target \ + cargo build -p nestri-gst --release \ + && mkdir -p "${ARTIFACTS}/usr/lib/gstreamer-1.0" \ + && cp target/release/libgstnestri.so \ + "${ARTIFACTS}/usr/lib/gstreamer-1.0/" + + +#****************************************************************************** +# muvm-build +#****************************************************************************** +# Build muvm binary (depends on libkrun + virgl packages). +FROM rust-builder AS muvm-build + +# Install custom-built packages that muvm links against +WORKDIR /scratch +COPY --from=libkrunfw-build /artifacts/*.zst pkgs/ +COPY --from=libkrun-build /artifacts/*.zst pkgs/ +COPY --from=virgl-build /artifacts/*.zst pkgs/ +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed pipewire \ + && pacman -U --noconfirm pkgs/*.zst \ + && rm -rf pkgs + +WORKDIR /scratch/muvm +COPY Cargo.toml Cargo.lock ./ +COPY crates/ ./crates/ +COPY apps/ ./apps/ +COPY share/ ./share/ + +RUN --mount=type=cache,target=${CARGO_HOME}/registry \ + --mount=type=cache,target=${CARGO_HOME}/git \ + --mount=type=cache,target=/scratch/muvm/target \ + cargo build -p muvm --release \ + && install -Dm755 target/release/muvm "${ARTIFACTS}/usr/bin/muvm" \ + && install -Dm755 target/release/muvm-guest "${ARTIFACTS}/usr/bin/muvm-guest" + + +#****************************************************************************** +# runner +#****************************************************************************** +# The final runtime image – kept as simple as possible. +FROM initial AS runner + +# ---- Enable multilib for 32-bit packages ---- +RUN echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf + +# ---- Collect and install custom-built .zst packages ---- +COPY --from=mesa-build /artifacts/*.zst /tmp/pkgs/ +COPY --from=lib32-mesa-build /artifacts/*.zst /tmp/pkgs/ +COPY --from=libkrunfw-build /artifacts/*.zst /tmp/pkgs/ +COPY --from=libkrun-build /artifacts/*.zst /tmp/pkgs/ +COPY --from=virgl-build /artifacts/*.zst /tmp/pkgs/ + +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -Syu --noconfirm \ + && pacman -U --noconfirm /tmp/pkgs/*.zst \ + && rm -rf /tmp/pkgs + +# ---- System runtime packages (single transaction for consistency) ---- +RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm \ + # Core + base systemd sudo bash \ + # Steam & Gaming + steam gamescope mangohud seatd \ + # Vulkan / Mesa / VA-API + vulkan-icd-loader vulkan-tools lib32-vulkan-icd-loader \ + libva-mesa-driver libva-utils \ + # Wayland / X + wayland libdrm libxkbcommon \ + xorg-xwayland xwayland-satellite \ + libinput \ + # Audio + pipewire pipewire-pulse pipewire-alsa wireplumber \ + lib32-libpulse \ + # GStreamer runtime plugins + gstreamer gst-plugins-base \ + gst-plugins-good gst-plugins-bad \ + gst-plugin-isobmff gst-plugin-va \ + gst-plugin-pipewire gst-plugin-qsv \ + # Video acceleration + vpl-gpu-rt \ + # GUI / Fonts + gtk3 lib32-gtk3 \ + ttf-liberation noto-fonts-cjk \ + # Networking & System + dbus curl passt openssh hwdata \ + jq pacman-contrib lib32-libvdpau + +# ---- Copy artifacts from Rust build stages ---- +COPY --from=wl-proxy-build /artifacts/usr/ /usr/ +COPY --from=gst-wayland-build /artifacts/usr/ /usr/ +COPY --from=nestrisink-build /artifacts/usr/ /usr/ +COPY --from=muvm-build /artifacts/usr/ /usr/ + +# ---- muvm-guest multi-call symlinks ---- +RUN mkdir -p /opt/bin \ + && ln -sf /usr/bin/muvm-guest /opt/bin/muvm-remote \ + && ln -sf /usr/bin/muvm-guest /opt/bin/muvm-configure-network \ + && ln -sf /usr/bin/muvm-guest /opt/bin/muvm-pwbridge + +# ---- User setup ---- +ARG NESTRI_USER_PWD="" +ENV NESTRI_USER="nestri" \ + NESTRI_UID=1000 \ + NESTRI_GID=1000 \ + NESTRI_LANG=en_US.UTF-8 \ + NESTRI_XDG_RUNTIME_DIR=/run/user/1000 \ + NESTRI_HOME=/home/nestri \ + NVIDIA_DRIVER_CAPABILITIES=all + +RUN mkdir -p "/home/${NESTRI_USER}" \ + && groupadd -g "${NESTRI_GID}" "${NESTRI_USER}" \ + && useradd -d "/home/${NESTRI_USER}" \ + -u "${NESTRI_UID}" -g "${NESTRI_GID}" \ + -s /bin/bash "${NESTRI_USER}" \ + && echo "${NESTRI_USER} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \ + && NESTRI_USER_PWD="${NESTRI_USER_PWD:-$(openssl rand -base64 12)}" \ + && echo "Setting password for ${NESTRI_USER}" \ + && echo "${NESTRI_USER}:${NESTRI_USER_PWD}" | chpasswd \ + && mkdir -p "${NESTRI_XDG_RUNTIME_DIR}" \ + && chown "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_XDG_RUNTIME_DIR}" \ + && usermod -aG input,video,render,seat,wheel,systemd-journal "${NESTRI_USER}" + +# ---- Wireplumber suspend disable ---- +RUN mkdir -p /run/dbus \ + && sed -i -z \ + -e 's/{[[:space:]]*name = node\/suspend-node\.lua,[[:space:]]*type = script\/lua[[:space:]]*provides = hooks\.node\.suspend[[:space:]]*}[[:space:]]*//g' \ + -e '/wants = \[/{s/hooks\.node\.suspend\s*//; s/,\s*\]/]/}' \ + /usr/share/wireplumber/wireplumber.conf + +# ---- Audio & config directories ---- +COPY etc/ /etc/ + +# ---- Steam config ---- +RUN mkdir -p "${NESTRI_HOME}/.local/share/Steam/config" +COPY build/steam/config.vdf "${NESTRI_HOME}/.local/share/Steam/config/" + +# ---- Mask noisy/broken services ---- +RUN systemctl mask \ + dm-event.socket \ + systemd-firstboot.service \ + systemd-homed.service \ + systemd-hwdb-update.service \ + systemd-network-generator.service \ + systemd-networkd.service \ + systemd-networkd-wait-online.service \ + systemd-remount-fs.service \ + systemd-resolved.service \ + systemd-timesyncd.service \ + systemd-userdbd.service \ + getty@tty1.service \ + serial-getty@.service + +# ---- Systemd units ---- +RUN systemctl enable dbus.service \ + && systemctl set-default microvm.target + +# ---- Scripts (copied last – they change the most) ---- +COPY build/usr/bin/ /usr/bin/ + +# ---- Smoke test ---- +RUN command -v steam muvm muvm-guest wl-cross-domain-proxy \ + nestri-entry nestri-init + +# ---- Final cleanup ---- +RUN rm -rf /tmp/* diff --git a/packages/configs/MangoHud/MangoHud.conf b/build/etc/nestri/configs/MangoHud/MangoHud.conf similarity index 100% rename from packages/configs/MangoHud/MangoHud.conf rename to build/etc/nestri/configs/MangoHud/MangoHud.conf diff --git a/build/etc/pipewire/pipewire.conf.d/nestri-loopback.conf b/build/etc/pipewire/pipewire.conf.d/nestri-loopback.conf new file mode 100644 index 00000000..3071d1ed --- /dev/null +++ b/build/etc/pipewire/pipewire.conf.d/nestri-loopback.conf @@ -0,0 +1,26 @@ +context.modules = [ + { + name = libpipewire-module-loopback + args = { + node.description = "Nestri Audio" + capture.props = { + node.name = "nestri-sink" + media.class = "Audio/Sink" + media.type = "Audio" + audio.position = [FL FR] + node.always-process = true + session.suspend-timeout-seconds = 0 + priority.session = 10000 + priority.driver = 10000 + } + playback.props = { + node.name = "nestri-source" + media.class = "Audio/Source" + media.type = "Audio" + audio.position = [FL FR] + node.always-process = true + session.suspend-timeout-seconds = 0 + } + } + } +] diff --git a/packages/configs/pipewire.conf.d/nestri-low-latency.conf b/build/etc/pipewire/pipewire.conf.d/nestri-low-latency.conf similarity index 99% rename from packages/configs/pipewire.conf.d/nestri-low-latency.conf rename to build/etc/pipewire/pipewire.conf.d/nestri-low-latency.conf index 8ba2dd1c..3606c7e6 100644 --- a/packages/configs/pipewire.conf.d/nestri-low-latency.conf +++ b/build/etc/pipewire/pipewire.conf.d/nestri-low-latency.conf @@ -4,4 +4,4 @@ context.properties = { default.clock.min-quantum = 128 default.clock.max-quantum = 1024 default.clock.quantum = 512 -} \ No newline at end of file +} diff --git a/build/etc/systemd/system/microvm.target b/build/etc/systemd/system/microvm.target new file mode 100644 index 00000000..9790c983 --- /dev/null +++ b/build/etc/systemd/system/microvm.target @@ -0,0 +1,4 @@ +[Unit] +Description=Nestri microVM system +AllowIsolate=yes +Wants=systemd-journald.socket systemd-udevd.service dbus.socket diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-network.service b/build/etc/systemd/system/microvm.target.wants/nestri-network.service new file mode 120000 index 00000000..3fbe8cb7 --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-network.service @@ -0,0 +1 @@ +../nestri-network.service \ No newline at end of file diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-pipewire-pulse.socket b/build/etc/systemd/system/microvm.target.wants/nestri-pipewire-pulse.socket new file mode 120000 index 00000000..5c04a38f --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-pipewire-pulse.socket @@ -0,0 +1 @@ +../nestri-pipewire-pulse.socket \ No newline at end of file diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-pwbridge.socket b/build/etc/systemd/system/microvm.target.wants/nestri-pwbridge.socket new file mode 120000 index 00000000..37c090ed --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-pwbridge.socket @@ -0,0 +1 @@ +../nestri-pwbridge.socket \ No newline at end of file diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-remote.service b/build/etc/systemd/system/microvm.target.wants/nestri-remote.service new file mode 120000 index 00000000..2ae9fba6 --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-remote.service @@ -0,0 +1 @@ +../nestri-remote.service \ No newline at end of file diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-session-bus.socket b/build/etc/systemd/system/microvm.target.wants/nestri-session-bus.socket new file mode 120000 index 00000000..d0e81770 --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-session-bus.socket @@ -0,0 +1 @@ +../nestri-session-bus.socket \ No newline at end of file diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-user-session.service b/build/etc/systemd/system/microvm.target.wants/nestri-user-session.service new file mode 120000 index 00000000..379372ae --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-user-session.service @@ -0,0 +1 @@ +../nestri-user-session.service \ No newline at end of file diff --git a/build/etc/systemd/system/microvm.target.wants/nestri-wayland-proxy.socket b/build/etc/systemd/system/microvm.target.wants/nestri-wayland-proxy.socket new file mode 120000 index 00000000..23deaaea --- /dev/null +++ b/build/etc/systemd/system/microvm.target.wants/nestri-wayland-proxy.socket @@ -0,0 +1 @@ +../nestri-wayland-proxy.socket \ No newline at end of file diff --git a/build/etc/systemd/system/nestri-network.service b/build/etc/systemd/system/nestri-network.service new file mode 100644 index 00000000..89a8d989 --- /dev/null +++ b/build/etc/systemd/system/nestri-network.service @@ -0,0 +1,14 @@ +[Unit] +Description=Configure VM network via muvm +DefaultDependencies=no +Before=network.target +After=systemd-udevd.service +Wants=microvm.target + +[Service] +Type=oneshot +ExecStart=/opt/bin/muvm-configure-network +RemainAfterExit=yes + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/nestri-pipewire-pulse.service b/build/etc/systemd/system/nestri-pipewire-pulse.service new file mode 100644 index 00000000..2aea0f66 --- /dev/null +++ b/build/etc/systemd/system/nestri-pipewire-pulse.service @@ -0,0 +1,15 @@ +[Unit] +Description=PipeWire PulseAudio compatibility daemon +Requires=nestri-pipewire-pulse.socket +After=nestri-pwbridge.service + +[Service] +Type=exec +ExecStartPre=/bin/mkdir -p /run/vm-user/pulse +ExecStart=/usr/bin/pipewire-pulse +Environment=XDG_RUNTIME_DIR=/run/vm-user +Environment=PIPEWIRE_RUNTIME_DIR=/run/vm-user +User=nestri +Group=nestri +Restart=on-failure +RestartSec=1 diff --git a/build/etc/systemd/system/nestri-pipewire-pulse.socket b/build/etc/systemd/system/nestri-pipewire-pulse.socket new file mode 100644 index 00000000..590b8690 --- /dev/null +++ b/build/etc/systemd/system/nestri-pipewire-pulse.socket @@ -0,0 +1,13 @@ +[Unit] +Description=PipeWire PulseAudio compatibility socket +PartOf=nestri-pipewire-pulse.service +After=nestri-pwbridge.socket nestri-user-session.service +Requires=nestri-pwbridge.socket nestri-user-session.service + +[Socket] +ListenStream=/run/vm-user/pulse/native +SocketUser=nestri +SocketGroup=nestri + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/nestri-procsys-rw.service b/build/etc/systemd/system/nestri-procsys-rw.service new file mode 100644 index 00000000..28c1be3e --- /dev/null +++ b/build/etc/systemd/system/nestri-procsys-rw.service @@ -0,0 +1,12 @@ +[Unit] +Description=Make /proc/sys writable for muvm +DefaultDependencies=no +Before=systemd-sysctl.service systemd-tmpfiles-setup.service +After=local-fs-pre.target + +[Service] +Type=oneshot +RemainAfterExit=yes +# umount the ro bind mount; exit 0 so service succeeds +# even if there's nothing to unmount (defensive) +ExecStart=/bin/sh -c 'umount /proc/sys 2>/dev/null || true' diff --git a/build/etc/systemd/system/nestri-pwbridge.service b/build/etc/systemd/system/nestri-pwbridge.service new file mode 100644 index 00000000..06224e0a --- /dev/null +++ b/build/etc/systemd/system/nestri-pwbridge.service @@ -0,0 +1,7 @@ +[Unit] +Description=PipeWire cross-domain proxy +Requires=nestri-pwbridge.socket + +[Service] +Type=exec +ExecStart=/opt/bin/muvm-pwbridge diff --git a/build/etc/systemd/system/nestri-pwbridge.socket b/build/etc/systemd/system/nestri-pwbridge.socket new file mode 100644 index 00000000..8b116697 --- /dev/null +++ b/build/etc/systemd/system/nestri-pwbridge.socket @@ -0,0 +1,13 @@ +[Unit] +Description=PipeWire cross-domain proxy socket +PartOf=nestri-pwbridge.service +After=nestri-user-session.service +Requires=nestri-user-session.service + +[Socket] +ListenStream=/run/vm-user/pipewire-0 +SocketUser=nestri +SocketGroup=nestri + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/nestri-remote.service b/build/etc/systemd/system/nestri-remote.service new file mode 100644 index 00000000..708cdb9e --- /dev/null +++ b/build/etc/systemd/system/nestri-remote.service @@ -0,0 +1,33 @@ +[Unit] +Description=microVM application runner +OnFailure=exit.target +OnSuccess=exit.target +Wants=sockets.target +After=sockets.target + +[Service] +Type=exec +PassEnvironment=MUVM_REMOTE_CONFIG MESA_LOADER_DRIVER_OVERRIDE TERM VK_DRIVER_FILES +Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/vm-user/dbus.sock +Environment=XDG_RUNTIME_DIR=/run/vm-user +Environment=WAYLAND_DISPLAY=wayland-1 +Environment=XDG_SESSION_TYPE=wayland +Environment=PULSE_SERVER=unix:/run/vm-user/pulse/native +Environment=SDL_AUDIO_DRIVER=pipewire +Environment=MESA_LOADER_DRIVER_OVERRIDE=zink +Environment=GALLIUM_DRIVER=zink +Environment=XAUTHORITY=/run/vm-user/xauth +Environment=MANGOHUD_CONFIGFILE=/etc/nestri/configs/MangoHud/MangoHud.conf +#Environment=SDL_VIDEODRIVER=wayland +Environment=PATH=/usr/bin:/usr/sbin:/bin:/sbin +User=root +Group=root +ExecStartPre=+/bin/chown nestri:nestri /run/vm-user +ExecStart=/opt/bin/muvm-remote +StandardOutput=tty +StandardInput=tty +StandardError=tty +TTYPath=/dev/hvc0 + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/nestri-session-bus.service b/build/etc/systemd/system/nestri-session-bus.service new file mode 100644 index 00000000..72bbcdf2 --- /dev/null +++ b/build/etc/systemd/system/nestri-session-bus.service @@ -0,0 +1,9 @@ +[Unit] +Description=D-Bus session bus +Requires=nestri-session-bus.socket + +[Service] +Type=exec +ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --syslog-only +User=nestri +Group=nestri diff --git a/build/etc/systemd/system/nestri-session-bus.socket b/build/etc/systemd/system/nestri-session-bus.socket new file mode 100644 index 00000000..c5d18eb3 --- /dev/null +++ b/build/etc/systemd/system/nestri-session-bus.socket @@ -0,0 +1,13 @@ +[Unit] +Description=D-Bus session bus socket +PartOf=nestri-session-bus.service +After=nestri-user-session.service +Requires=nestri-user-session.service + +[Socket] +ListenStream=/run/vm-user/dbus.sock +SocketUser=nestri +SocketGroup=nestri + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/nestri-user-session.service b/build/etc/systemd/system/nestri-user-session.service new file mode 100644 index 00000000..0c51086b --- /dev/null +++ b/build/etc/systemd/system/nestri-user-session.service @@ -0,0 +1,13 @@ +[Unit] +Description=Prepare VM user runtime directory +DefaultDependencies=no +Before=nestri-wayland-proxy.socket nestri-pwbridge.socket nestri-session-bus.socket +After=local-fs.target + +[Service] +Type=oneshot +ExecStart=/bin/bash -c 'mkdir -p /run/vm-user && chown 1000:1000 /run/vm-user && chmod 700 /run/vm-user' +RemainAfterExit=yes + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/nestri-wayland-proxy.service b/build/etc/systemd/system/nestri-wayland-proxy.service new file mode 100644 index 00000000..41f54e49 --- /dev/null +++ b/build/etc/systemd/system/nestri-wayland-proxy.service @@ -0,0 +1,12 @@ +[Unit] +Description=Wayland cross-domain proxy +Requires=nestri-wayland-proxy.socket + +[Service] +Type=exec +ExecStartPre=+/bin/chmod 0666 /dev/dri/card0 /dev/dri/renderD128 +ExecStart=/usr/bin/wl-cross-domain-proxy --listen-fd +User=nestri +Group=nestri +StandardOutput=file:/tmp/wayland-proxy.log +StandardError=file:/tmp/wayland-proxy-err.log diff --git a/build/etc/systemd/system/nestri-wayland-proxy.socket b/build/etc/systemd/system/nestri-wayland-proxy.socket new file mode 100644 index 00000000..4625891c --- /dev/null +++ b/build/etc/systemd/system/nestri-wayland-proxy.socket @@ -0,0 +1,14 @@ +[Unit] +Description=Wayland cross-domain proxy socket +PartOf=nestri-wayland-proxy.service +After=nestri-user-session.service +Requires=nestri-user-session.service + +[Socket] +ListenStream=/run/vm-user/wayland-1 +SocketUser=nestri +SocketGroup=nestri +FileDescriptorName=wayland + +[Install] +WantedBy=microvm.target diff --git a/build/etc/systemd/system/sysinit.target.wants/nestri-procsys-rw.service b/build/etc/systemd/system/sysinit.target.wants/nestri-procsys-rw.service new file mode 120000 index 00000000..8f45d1ca --- /dev/null +++ b/build/etc/systemd/system/sysinit.target.wants/nestri-procsys-rw.service @@ -0,0 +1 @@ +../nestri-procsys-rw.service \ No newline at end of file diff --git a/packages/configs/wireplumber.conf.d/nestri-low-latency.conf b/build/etc/wireplumper/wireplumper.conf.d/nestri-low-latency.conf similarity index 100% rename from packages/configs/wireplumber.conf.d/nestri-low-latency.conf rename to build/etc/wireplumper/wireplumper.conf.d/nestri-low-latency.conf diff --git a/build/packages/lib32-mesa/PKGBUILD b/build/packages/lib32-mesa/PKGBUILD new file mode 100644 index 00000000..931ca2b1 --- /dev/null +++ b/build/packages/lib32-mesa/PKGBUILD @@ -0,0 +1,412 @@ +pkgbase=lib32-mesa +pkgname=( + lib32-mesa + lib32-vulkan-intel + lib32-vulkan-nouveau + lib32-vulkan-radeon + lib32-vulkan-virtio + lib32-vulkan-mesa-layers + lib32-vulkan-mesa-implicit-layers +) +pkgver=26.1.0 +_pkgver=${pkgver/[a-z]/-&} +pkgrel=1 +epoch=1 +pkgdesc="Open-source OpenGL drivers - 32-bit" +url="https://gitlab.freedesktop.org/mesa/mesa" +arch=(x86_64) +license=("MIT AND BSD-3-Clause AND SGI-B-2.0") +makedepends=( + lib32-clang + lib32-directx-headers + lib32-expat + lib32-gcc-libs + lib32-glibc + lib32-libdisplay-info + lib32-libdrm + lib32-libelf + lib32-libglvnd + lib32-libpng + lib32-libva + lib32-libx11 + lib32-libxcb + lib32-libxext + lib32-libxml2 + lib32-libxrandr + lib32-libxshmfence + lib32-libxxf86vm + lib32-llvm + lib32-llvm-libs + lib32-lm_sensors + lib32-rust-libs + lib32-spirv-llvm-translator + lib32-spirv-tools + lib32-systemd + lib32-vulkan-icd-loader + lib32-wayland + lib32-xcb-util-keysyms + lib32-zlib + lib32-zstd + + # shared between mesa and lib32-mesa + cbindgen + clang + cmake + elfutils + glslang + libclc + meson + python-mako + python-packaging + python-ply + python-pycparser + python-yaml + rust-bindgen + wayland-protocols + xorgproto +) +options=( + # GCC 14 LTO causes segfault in LLVM under si_llvm_optimize_module + # https://gitlab.freedesktop.org/mesa/mesa/-/issues/11140 + # + # In general, upstream considers LTO to be broken until explicit notice. + !lto +) +source=("${pkgname}::git+${url}.git#branch=main") + +# Rust crates for NVK, used as Meson subprojects +declare -A _crates=( + bitflags 2.9.1 + cfg-if 1.0.0 + equivalent 1.0.1 + errno 0.3.12 + hashbrown 0.14.1 + indexmap 2.2.6 + libc 0.2.171 + log 0.4.27 + once_cell 1.8.0 + paste 1.0.14 + pest 2.8.0 + pest_derive 2.8.0 + pest_generator 2.8.0 + pest_meta 2.8.0 + proc-macro2 1.0.86 + quote 1.0.35 + remain 0.2.12 + roxmltree 0.20.0 + rustc-hash 2.1.1 + rustix 1.1.2 + syn 2.0.87 + thiserror 2.0.11 + thiserror-impl 2.0.11 + ucd-trie 0.1.6 + unicode-ident 1.0.12 + windows-link 0.2.0 + windows-sys 0.61.1 + zerocopy 0.8.13 + zerocopy-derive 0.8.13 +) + +# Used to generate the above table +_gencrates() { + grep '^source_url' subprojects/*-rs.wrap | \ + sed -r 's|.*crates/([^/]+)/([0-9.]+)/download|\1 \2|' | \ + column -t -S 2 | sed 's/^/ /' +} + +for _crate in "${!_crates[@]}"; do + _ver="${_crates[$_crate]}" + source+=( + "$_crate-$_ver.tar.gz::https://crates.io/api/v1/crates/$_crate/$_ver/download" + ) +done + +# https://docs.mesa3d.org/relnotes.html +sha256sums=('SKIP') + +prepare() { + cd lib32-mesa + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + src="${src%.zst}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + local meson_options=( + --cross-file lib32 + -D amdgpu-virtio=true + -D intel-virtio-experimental=true + -D android-libbacktrace=disabled + -D b_ndebug=true + -D gallium-drivers=all + -D gallium-extra-hud=true + -D gallium-mediafoundation=disabled + -D gallium-rusticl-enable-drivers=asahi,freedreno,radeonsi + -D gallium-rusticl=true + -D gles1=disabled + -D html-docs=disabled + -D intel-rt=disabled + -D libunwind=disabled + -D microsoft-clc=disabled + -D sysprof=false + -D valgrind=disabled + -D video-codecs=all + -D vulkan-drivers=all + -D vulkan-layers=device-select,intel-nullhw,overlay,screenshot,anti-lag,vram-report-limit + -D vulkan-manifest-per-architecture=false + ) + + # Build only minimal debug info to reduce size + CFLAGS+=" -g1" + CXXFLAGS+=" -g1" + + # Inject subproject packages + export MESON_PACKAGE_CACHE_DIR="$srcdir" + + arch-meson lib32-mesa build "${meson_options[@]}" + meson compile -C build +} + +_pick() { + local p="$1" f d; shift + for f; do + d="$srcdir/$p/${f#$pkgdir/}" + mkdir -p "$(dirname "$d")" + mv -v "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +package_lib32-mesa() { + depends=( + lib32-expat + lib32-gcc-libs + lib32-glibc + lib32-libdrm + lib32-libelf + lib32-libglvnd + lib32-libx11 + lib32-libxcb + lib32-libxext + lib32-libxshmfence + lib32-libxxf86vm + lib32-llvm-libs + lib32-lm_sensors + lib32-spirv-tools + lib32-wayland + lib32-zlib + lib32-zstd + + mesa + ) + optdepends=("opengl-man-pages: for the OpenGL API man pages") + provides=( + "lib32-libva-mesa-driver=$epoch:$pkgver-$pkgrel" + "lib32-mesa-libgl=$epoch:$pkgver-$pkgrel" + lib32-libva-driver + lib32-opengl-driver + ) + conflicts=( + 'lib32-libva-mesa-driver<1:24.2.7-1' + 'lib32-mesa-libgl<17.0.1-2' + ) + replaces=( + 'lib32-libva-mesa-driver<1:24.2.7-1' + 'lib32-mesa-libgl<17.0.1-2' + ) + + meson install -C build --destdir "$pkgdir" --no-rebuild + + ( + local libdir=usr/lib32 + + cd "$pkgdir" + + _pick vkintel $libdir/libvulkan_intel{,_hasvk}.so + + _pick vknvidia $libdir/libvulkan_nouveau.so + + _pick vkradeon $libdir/libvulkan_radeon.so + + _pick vkvirtio $libdir/libvulkan_virtio.so + + _pick vkdevice $libdir/libVkLayer_MESA_anti_lag.so + _pick vkdevice $libdir/libVkLayer_MESA_device_select.so + + _pick vklayer $libdir/libVkLayer_*.so + + rm -rv etc usr/{bin,include,share} + + # indirect rendering + ln -sr $libdir/libGLX_{mesa,indirect}.so.0 + ) + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lib32-vulkan-intel() { + pkgdesc="Open-source Vulkan driver for Intel GPUs - 32-bit" + depends=( + lib32-expat + lib32-gcc-libs + lib32-glibc + lib32-libdisplay-info + lib32-libdrm + lib32-libx11 + lib32-libxcb + lib32-libxshmfence + lib32-spirv-tools + lib32-systemd + lib32-vulkan-icd-loader + lib32-vulkan-mesa-implicit-layers + lib32-wayland + lib32-xcb-util-keysyms + lib32-zlib + lib32-zstd + + vulkan-intel + ) + optdepends=("lib32-vulkan-mesa-layers: additional vulkan layers") + provides=(lib32-vulkan-driver) + + mv vkintel/* "$pkgdir" + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lib32-vulkan-nouveau() { + pkgdesc="Open-source Vulkan driver for Nvidia GPUs - 32-bit" + depends=( + lib32-expat + lib32-gcc-libs + lib32-glibc + lib32-libdisplay-info + lib32-libdrm + lib32-libx11 + lib32-libxcb + lib32-libxshmfence + lib32-spirv-tools + lib32-systemd + lib32-vulkan-icd-loader + lib32-vulkan-mesa-implicit-layers + lib32-wayland + lib32-xcb-util-keysyms + lib32-zlib + lib32-zstd + + vulkan-nouveau + ) + optdepends=("lib32-vulkan-mesa-layers: additional vulkan layers") + provides=(lib32-vulkan-driver) + + mv vknvidia/* "$pkgdir" + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lib32-vulkan-radeon() { + pkgdesc="Open-source Vulkan driver for AMD GPUs - 32-bit" + depends=( + lib32-expat + lib32-gcc-libs + lib32-glibc + lib32-libdisplay-info + lib32-libdrm + lib32-libelf + lib32-libx11 + lib32-libxcb + lib32-libxshmfence + lib32-llvm-libs + lib32-spirv-tools + lib32-systemd + lib32-vulkan-icd-loader + lib32-vulkan-mesa-implicit-layers + lib32-wayland + lib32-xcb-util-keysyms + lib32-zlib + lib32-zstd + + vulkan-radeon + ) + optdepends=("lib32-vulkan-mesa-layers: additional vulkan layers") + provides=(lib32-vulkan-driver) + replaces=('lib32-amdvlk<=2025.Q2.1-1') + + mv vkradeon/* "$pkgdir" + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lib32-vulkan-virtio() { + pkgdesc="Open-source Vulkan driver for Virtio-GPU (Venus) - 32-bit" + depends=( + lib32-expat + lib32-gcc-libs + lib32-glibc + lib32-libdisplay-info + lib32-libdrm + lib32-libx11 + lib32-libxcb + lib32-libxshmfence + lib32-systemd + lib32-vulkan-icd-loader + lib32-vulkan-mesa-implicit-layers + lib32-wayland + lib32-xcb-util-keysyms + lib32-zlib + lib32-zstd + + vulkan-virtio + ) + optdepends=("lib32-vulkan-mesa-layers: additional vulkan layers") + provides=(lib32-vulkan-driver) + + mv vkvirtio/* "$pkgdir" + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lib32-vulkan-mesa-layers() { + pkgdesc="Mesa's explicit Vulkan layers - 32-bit" + depends=( + lib32-gcc-libs + lib32-glibc + lib32-libpng + + vulkan-mesa-layers + ) + conflicts=(lib32-vulkan-mesa-layer) + replaces=(lib32-vulkan-mesa-layer) + + mv vklayer/* "$pkgdir" + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lib32-vulkan-mesa-implicit-layers() { + pkgdesc="Mesa's implicit Vulkan layers - 32-bit" + depends=( + lib32-gcc-libs + lib32-glibc + lib32-libdrm + lib32-libxcb + lib32-wayland + + vulkan-mesa-implicit-layers + ) + conflicts=(lib32-vulkan-mesa-device-select) + replaces=(lib32-vulkan-mesa-device-select) + + mv vkdevice/* "$pkgdir" + + install -Dm644 lib32-mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +# vim:set sw=2 sts=-1 et: diff --git a/build/packages/libkrun/PKGBUILD b/build/packages/libkrun/PKGBUILD new file mode 100644 index 00000000..bfffe7c5 --- /dev/null +++ b/build/packages/libkrun/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=libkrun +pkgver=1.17.3.r0.gvalpackett +pkgrel=1 +pkgdesc="A dynamic library providing Virtualization-based process isolation capabilities (val/vluqsysxtqrk branch)" +url='https://github.com/valpackett/libkrun' +arch=('x86_64') +license=('Apache-2.0') +makedepends=('cargo' 'patchelf' 'clang' 'git') +depends=('glibc' 'gcc-libs' 'libkrunfw' 'pipewire' 'virglrenderer') +# Format: 'folder_name::git+url#branch=branch_name' +source=("${pkgname}::git+${url}.git#branch=val/vluqsysxtqrk") +sha256sums=('SKIP') + +pkgver() { + cd "$pkgname" + # Generates a version string based on the latest tag and commit count + git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//' +} + +prepare() { + cd "$pkgname" + + cargo fetch --locked --target "$(rustc --print host-tuple)" +} + +build() { + cd "$pkgname" + + export ZSTD_SYS_USE_PKG_CONFIG=1 + make BLK=1 NET=1 EFI=0 GPU=1 SND=1 INPUT=1 VERBOSE=1 +} + +package() { + cd "$pkgname" + + make DESTDIR="$pkgdir" PREFIX=/usr LIBDIR_Linux=lib install + + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/build/packages/libkrunfw/PKGBUILD b/build/packages/libkrunfw/PKGBUILD new file mode 100644 index 00000000..76bbf323 --- /dev/null +++ b/build/packages/libkrunfw/PKGBUILD @@ -0,0 +1,51 @@ +pkgname=libkrunfw +_kver=6.12.68 +pkgver=5.2.1 +pkgrel=1 +pkgdesc="A dynamic library bundling the guest payload consumed by libkrun (with 32-bit support)" +url="https://github.com/containers/libkrunfw" +arch=('x86_64') +license=('GPL-2.0-only' 'LGPL-2.1-only') +depends=('glibc') +makedepends=('bc' 'python-pyelftools' 'cpio') +source=("https://github.com/containers/libkrunfw/archive/refs/tags/v$pkgver/$pkgname-$pkgver.tar.gz" + "https://cdn.kernel.org/pub/linux/kernel/v${_kver%%.*}.x/linux-${_kver}.tar.xz") +noextract=("linux-${_kver}.tar.xz") +options=(!debug) +sha256sums=('c7eebd7149b15e4d74d2dff9acd3137dc13eedf604adf1df2efa52d9f36fe0bb' + 'd367c7504bd4da520dd01eb08125d2d0ac088bc8af4cd56d236f2074dd4225b7') + +build() { + cd "$pkgname-$pkgver" + + mkdir -p tarballs + cp -s "$srcdir/linux-${_kver}.tar.xz" tarballs/ + + _config="config-libkrunfw_x86_64" + + # Enable IA32 (32-bit) emulation support + sed -i 's/# CONFIG_IA32_EMULATION is not set/CONFIG_IA32_EMULATION=y/' "$_config" + + # Enable modify_ldt syscall (needed by many 32-bit apps including Steam) + sed -i 's/# CONFIG_MODIFY_LDT_SYSCALL is not set/CONFIG_MODIFY_LDT_SYSCALL=y/' "$_config" + + # Enable 32-bit time compatibility + sed -i 's/# CONFIG_COMPAT_32BIT_TIME is not set/CONFIG_COMPAT_32BIT_TIME=y/' "$_config" + + # Enable x32 ABI + sed -i 's/# CONFIG_X86_X32_ABI is not set/CONFIG_X86_X32_ABI=y/' "$_config" + + # Increase max CPU count (default 16 is low for gaming) + sed -i 's/CONFIG_NR_CPUS=16/CONFIG_NR_CPUS=128/' "$_config" + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" PREFIX=/usr LIBDIR_Linux=lib install + + install -Dm644 LICENSE-GPL-2.0-only "$pkgdir"/usr/share/licenses/$pkgname/LICENSE-GPL-2.0-only + install -Dm644 LICENSE-LGPL-2.1-only "$pkgdir"/usr/share/licenses/$pkgname/LICENSE-LGPL-2.1-only +} diff --git a/build/packages/mesa/PKGBUILD b/build/packages/mesa/PKGBUILD new file mode 100644 index 00000000..ce2d0ada --- /dev/null +++ b/build/packages/mesa/PKGBUILD @@ -0,0 +1,418 @@ +pkgbase=mesa +pkgname=( + mesa + vulkan-intel + vulkan-nouveau + vulkan-radeon + vulkan-virtio + vulkan-mesa-layers + vulkan-mesa-implicit-layers +) +pkgver=26.1.0 +_pkgver=${pkgver/[a-z]/-&} +pkgrel=1 +epoch=1 +pkgdesc="Open-source OpenGL drivers" +url="https://gitlab.freedesktop.org/mesa/mesa" +arch=(x86_64) +license=("MIT AND BSD-3-Clause AND SGI-B-2.0") +makedepends=( + clang + directx-headers + expat + glibc + libdisplay-info + libdrm + libelf + libgcc + libglvnd + libpng + libstdc++ + libva + libx11 + libxcb + libxext + libxml2 + libxrandr + libxshmfence + libxxf86vm + llvm + llvm-libs + lm_sensors + rust + spirv-llvm-translator + spirv-tools + systemd-libs + vulkan-icd-loader + wayland + xcb-util-keysyms + zlib + zstd + + # shared between mesa and lib32-mesa + cbindgen + clang + cmake + elfutils + glslang + libclc + meson + python-mako + python-packaging + python-ply + python-pycparser + python-yaml + rust-bindgen + wayland-protocols + xorgproto + + # mesa-only deps + libsysprof-capture + valgrind + + # html-docs + python-sphinx + python-sphinx-hawkmoth +) +options=( + # GCC 14 LTO causes segfault in LLVM under si_llvm_optimize_module + # https://gitlab.freedesktop.org/mesa/mesa/-/issues/11140 + # + # In general, upstream considers LTO to be broken until explicit notice. + !lto +) +source=("${pkgname}::git+${url}.git#branch=main") + +# Rust crates for NVK, used as Meson subprojects +declare -A _crates=( + bitflags 2.9.1 + cfg-if 1.0.0 + equivalent 1.0.1 + errno 0.3.12 + hashbrown 0.14.1 + indexmap 2.2.6 + libc 0.2.171 + log 0.4.27 + once_cell 1.8.0 + paste 1.0.14 + pest 2.8.0 + pest_derive 2.8.0 + pest_generator 2.8.0 + pest_meta 2.8.0 + proc-macro2 1.0.86 + quote 1.0.35 + remain 0.2.12 + roxmltree 0.20.0 + rustc-hash 2.1.1 + rustix 1.1.2 + syn 2.0.87 + thiserror 2.0.11 + thiserror-impl 2.0.11 + ucd-trie 0.1.6 + unicode-ident 1.0.12 + windows-link 0.2.0 + windows-sys 0.61.1 + zerocopy 0.8.13 + zerocopy-derive 0.8.13 +) + +# Used to generate the above table +_gencrates() { + grep '^source_url' subprojects/*-rs.wrap | \ + sed -r 's|.*crates/([^/]+)/([0-9.]+)/download|\1 \2|' | \ + column -t -S 2 | sed 's/^/ /' +} + +for _crate in "${!_crates[@]}"; do + _ver="${_crates[$_crate]}" + source+=( + "$_crate-$_ver.tar.gz::https://crates.io/api/v1/crates/$_crate/$_ver/download" + ) +done + +# https://docs.mesa3d.org/relnotes.html +sha256sums=('SKIP') + +prepare() { + cd mesa + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + src="${src%.zst}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + local meson_options=( + -D amdgpu-virtio=true + -D intel-virtio-experimental=true + -D android-libbacktrace=disabled + -D b_ndebug=true + -D gallium-drivers=all + -D gallium-extra-hud=true + -D gallium-mediafoundation=disabled + -D gallium-rusticl-enable-drivers=asahi,freedreno,radeonsi + -D gallium-rusticl=true + -D gles1=disabled + -D html-docs=enabled + -D intel-rt=enabled + -D libunwind=disabled + -D microsoft-clc=disabled + -D sysprof=true + -D valgrind=enabled + -D video-codecs=all + -D vulkan-drivers=all + -D vulkan-layers=device-select,intel-nullhw,overlay,screenshot,anti-lag,vram-report-limit + -D vulkan-manifest-per-architecture=false + ) + + # Build only minimal debug info to reduce size + CFLAGS+=" -g1" + CXXFLAGS+=" -g1" + + # Inject subproject packages + export MESON_PACKAGE_CACHE_DIR="$srcdir" + + arch-meson mesa build "${meson_options[@]}" + meson compile -C build +} + +_pick() { + local p="$1" f d; shift + for f; do + d="$srcdir/$p/${f#$pkgdir/}" + mkdir -p "$(dirname "$d")" + mv -v "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +package_mesa() { + depends=( + expat + glibc + libdrm + libelf + libgcc + libglvnd + libstdc++ + libx11 + libxcb + libxext + libxshmfence + libxxf86vm + llvm-libs + lm_sensors + spirv-tools + wayland + zlib + zstd + ) + optdepends=("opengl-man-pages: for the OpenGL API man pages") + provides=( + "libva-mesa-driver=$epoch:$pkgver-$pkgrel" + "mesa-libgl=$epoch:$pkgver-$pkgrel" + libva-driver + opengl-driver + ) + conflicts=( + 'libva-mesa-driver<1:24.2.7-1' + 'mesa-libgl<17.0.1-2' + ) + replaces=( + 'libva-mesa-driver<1:24.2.7-1' + 'mesa-libgl<17.0.1-2' + ) + + meson install -C build --destdir "$pkgdir" --no-rebuild + + ( + local libdir=usr/lib + + cd "$pkgdir" + + _pick vkintel $libdir/libvulkan_intel{,_hasvk}.so + _pick vkintel usr/share/vulkan/icd.d/intel{,_hasvk}_icd.json + + _pick vknvidia $libdir/libvulkan_nouveau.so + _pick vknvidia usr/share/vulkan/icd.d/nouveau_icd.json + + _pick vkradeon $libdir/libvulkan_radeon.so + _pick vkradeon usr/share/drirc.d/00-radv-defaults.conf + _pick vkradeon usr/share/vulkan/icd.d/radeon_icd.json + + _pick vkvirtio $libdir/libvulkan_virtio.so + _pick vkvirtio usr/share/vulkan/icd.d/virtio_icd.json + + _pick vkdevice $libdir/libVkLayer_MESA_anti_lag.so + _pick vkdevice $libdir/libVkLayer_MESA_device_select.so + _pick vkdevice usr/share/vulkan/implicit_layer.d + + _pick vklayer $libdir/libVkLayer_*.so + _pick vklayer usr/bin/mesa-*-control.py + _pick vklayer usr/share/vulkan/explicit_layer.d + + # indirect rendering + ln -sr $libdir/libGLX_{mesa,indirect}.so.0 + ) + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_vulkan-intel() { + pkgdesc="Open-source Vulkan driver for Intel GPUs" + depends=( + expat + glibc + libdisplay-info + libdrm + libgcc + libstdc++ + libx11 + libxcb + libxshmfence + spirv-tools + systemd-libs + vulkan-icd-loader + vulkan-mesa-implicit-layers + wayland + xcb-util-keysyms + zlib + zstd + ) + optdepends=("vulkan-mesa-layers: additional vulkan layers") + provides=(vulkan-driver) + + mv vkintel/* "$pkgdir" + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_vulkan-nouveau() { + pkgdesc="Open-source Vulkan driver for Nvidia GPUs" + depends=( + expat + glibc + libdisplay-info + libdrm + libgcc + libstdc++ + libx11 + libxcb + libxshmfence + spirv-tools + systemd-libs + vulkan-icd-loader + vulkan-mesa-implicit-layers + wayland + xcb-util-keysyms + zlib + zstd + ) + optdepends=("vulkan-mesa-layers: additional vulkan layers") + provides=(vulkan-driver) + + mv vknvidia/* "$pkgdir" + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_vulkan-radeon() { + pkgdesc="Open-source Vulkan driver for AMD GPUs" + depends=( + expat + glibc + libdisplay-info + libdrm + libelf + libgcc + libstdc++ + libx11 + libxcb + libxshmfence + llvm-libs + spirv-tools + systemd-libs + vulkan-icd-loader + vulkan-mesa-implicit-layers + wayland + xcb-util-keysyms + zlib + zstd + ) + optdepends=("vulkan-mesa-layers: additional vulkan layers") + provides=(vulkan-driver) + replaces=('amdvlk<=2025.Q2.1-1') + + mv vkradeon/* "$pkgdir" + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_vulkan-virtio() { + pkgdesc="Open-source Vulkan driver for Virtio-GPU (Venus)" + depends=( + expat + glibc + libdisplay-info + libdrm + libgcc + libx11 + libxcb + libxshmfence + systemd-libs + vulkan-icd-loader + vulkan-mesa-implicit-layers + wayland + xcb-util-keysyms + zlib + zstd + ) + optdepends=("vulkan-mesa-layers: additional vulkan layers") + provides=(vulkan-driver) + + mv vkvirtio/* "$pkgdir" + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_vulkan-mesa-layers() { + pkgdesc="Mesa's explicit Vulkan layers" + depends=( + glibc + libgcc + libpng + libstdc++ + + python + ) + conflicts=(vulkan-mesa-layer) + replaces=(vulkan-mesa-layer) + + mv vklayer/* "$pkgdir" + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_vulkan-mesa-implicit-layers() { + pkgdesc="Mesa's implicit Vulkan layers" + depends=( + glibc + libdrm + libxcb + wayland + ) + conflicts=(vulkan-mesa-device-select) + replaces=(vulkan-mesa-device-select) + + mv vkdevice/* "$pkgdir" + + install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +# vim:set sw=2 sts=-1 et: diff --git a/build/packages/virglrenderer/PKGBUILD b/build/packages/virglrenderer/PKGBUILD new file mode 100644 index 00000000..41d0d5e7 --- /dev/null +++ b/build/packages/virglrenderer/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=virglrenderer +pkgver=1.3.0 +pkgrel=1 +pkgdesc='A virtual 3D GPU library, that allows the guest operating system to use the host GPU to accelerate 3D rendering' +arch=(x86_64) +url='https://virgil3d.github.io/' +license=(MIT) +depends=(libepoxy mesa libva vulkan-icd-loader) +makedepends=(python meson ninja vulkan-headers python-yaml) +checkdepends=(check) +_tag=virglrenderer-$pkgver +source=(virglrenderer-$pkgver.tar.bz2::https://gitlab.freedesktop.org/virgl/virglrenderer/-/archive/$_tag/virglrenderer-$_tag.tar.bz2) +sha256sums=('47a64189492a754685a430c713ac6700f4b1c3e7b871e87889ddb96e4d65e8ab') + +build() { + cd virglrenderer-$_tag + meson --prefix=/usr --libexecdir=lib/$pkgname build \ + -Dvideo=true \ + -Dvenus=true \ + -Ddrm-renderers=amdgpu-experimental,i915-experimental + ninja -C build +} + +package() { + cd virglrenderer-$_tag + DESTDIR="$pkgdir" ninja -C build install + install -D -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/packages/configs/steam/config.vdf b/build/steam/config.vdf similarity index 100% rename from packages/configs/steam/config.vdf rename to build/steam/config.vdf diff --git a/build/usr/bin/nestri-entry b/build/usr/bin/nestri-entry new file mode 100644 index 00000000..55b1746d --- /dev/null +++ b/build/usr/bin/nestri-entry @@ -0,0 +1,576 @@ +#!/bin/bash +set -e + +# ============================================================ +# nestri-entry +# +# Entry point that runs inside the bwrap sandbox. +# Launched by nestri-runner.sh as the top-level process. +# +# Responsibilities: +# 1. Start PipeWire (sandbox-local audio server) +# 2. Start GStreamer pipeline (Wayland compositor + encoding + streaming) +# 3. Launch muvm (microVM that runs the actual games) +# +# The GStreamer pipeline IS the Wayland compositor: +# - waylanddisplaysrc creates $XDG_RUNTIME_DIR/wayland-1 +# - VM guest connects via wl-cross-domain-proxy (virtio-gpu) +# - Video frames captured as DMA-BUF, encoded, streamed via QUIC +# - Audio captured from PipeWire, encoded as Opus, muxed with video +# +# Environment variables (set by nestri-runner.sh): +# NESTRI_WIDTH Stream width (default: 1920) +# NESTRI_HEIGHT Stream height (default: 1080) +# NESTRI_FPS Stream framerate (default: 60) +# NESTRI_BITRATE Encoder bitrate in kbps (default: 8000) +# NESTRI_RENDER_NODE GPU render node (default: /dev/dri/renderD128) +# NESTRI_BROADCAST Stream broadcast name (default: live) +# NESTRI_GPU GPU type: amd, intel, nvidia (default: amd) +# NESTRI_CODEC Video codec: h264, h265, av1 (default: h264) +# MICROVM_UID User ID inside sandbox/VM +# MICROVM_GID Group ID inside sandbox/VM +# +# muvm-guest binary symlinks (in /opt/bin/): +# muvm-remote — session runner (runs user command) +# muvm-configure-network — network setup for VM +# muvm-pwbridge — PipeWire bridge (host ↔ guest audio) +# ============================================================ + +# ============================================================ +# Configuration (from environment or defaults) +# ============================================================ + +NESTRI_WIDTH="${NESTRI_WIDTH:-1920}" +NESTRI_HEIGHT="${NESTRI_HEIGHT:-1080}" +NESTRI_FPS="${NESTRI_FPS:-60}" +NESTRI_BITRATE="${NESTRI_BITRATE:-8000}" +NESTRI_RENDER_NODE="${NESTRI_RENDER_NODE:-/dev/dri/renderD128}" +NESTRI_BROADCAST="${NESTRI_BROADCAST:-live}" +MICROVM_UID="${MICROVM_UID:-1000}" + +# GPU and codec selection +# GPU options: amd, intel, nvidia +# Codec options: h264, h265, av1 +NESTRI_GPU="${NESTRI_GPU:-amd}" +NESTRI_CODEC="${NESTRI_CODEC:-h264}" + +# Setup XDG_RUNTIME_DIR +mkdir -p "$XDG_RUNTIME_DIR" + +# Track background PIDs for cleanup +PIDS=() + +cleanup() { + echo "nestri-entry: shutting down..." >&2 + + # Kill all tracked background processes + for pid in "${PIDS[@]}"; do + if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then + kill -TERM "$pid" 2>/dev/null + fi + done + + # Wait briefly for graceful shutdown + sleep 0.5 + + # Force kill anything still alive + for pid in "${PIDS[@]}"; do + if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then + kill -KILL "$pid" 2>/dev/null + fi + done + + # dbus-launch sets this separately + if [ -n "${DBUS_SESSION_BUS_PID:-}" ]; then + kill -TERM "$DBUS_SESSION_BUS_PID" 2>/dev/null + fi + + exit +} + +trap cleanup EXIT INT TERM + +# ============================================================ +# 1. D-Bus Session Bus + PipeWire (sandbox-local audio) +# +# WirePlumber requires a D-Bus session bus — it's a hard +# dependency. PipeWire itself can start without D-Bus, but +# WirePlumber (the session manager that handles routing, +# device enumeration, policy) will abort without one. +# +# Inside the VM, systemd provides the session bus via +# nestri-session-bus.service. Here in bwrap, we have no +# systemd, so we launch dbus-daemon manually. +# +# Audio flow: +# Game (in VM) → PipeWire (guest) → muvm-pwbridge → PipeWire (here) +# PipeWire (here) → pipewiresrc → GStreamer → Opus encode → QUIC +# ============================================================ + +# --- D-Bus session bus --- +echo "nestri-entry: starting dbus session bus..." >&2 + +# Create dbus directory +mkdir -p "$XDG_RUNTIME_DIR/dbus" + +# Launch a session bus and capture its address +eval "$(dbus-launch --sh-syntax)" + +if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then + echo "nestri-entry: WARNING — dbus-launch failed, trying manual start..." >&2 + + DBUS_SOCKET="$XDG_RUNTIME_DIR/dbus/session-bus" + dbus-daemon \ + --session \ + --address="unix:path=$DBUS_SOCKET" \ + --nofork \ + --print-address \ + &>/dev/null & + DBUS_PID=$! + PIDS+=($DBUS_PID) + + # Wait for socket + for i in $(seq 1 30); do + [ -S "$DBUS_SOCKET" ] && break + sleep 0.1 + done + + if [ -S "$DBUS_SOCKET" ]; then + export DBUS_SESSION_BUS_ADDRESS="unix:path=$DBUS_SOCKET" + echo "nestri-entry: dbus ready at $DBUS_SOCKET" >&2 + else + echo "nestri-entry: WARNING — dbus-daemon failed to start" >&2 + echo "nestri-entry: wireplumber will likely fail" >&2 + fi +else + # dbus-launch succeeded, track its PID for cleanup + PIDS+=("${DBUS_SESSION_BUS_PID:-}") + echo "nestri-entry: dbus ready (via dbus-launch) PID=${DBUS_SESSION_BUS_PID:-}" >&2 +fi + +export DBUS_SESSION_BUS_ADDRESS + +# --- PipeWire --- +echo "nestri-entry: starting pipewire..." >&2 +pipewire & +PIDS+=($!) + +# Wait for PipeWire socket +for i in $(seq 1 50); do + [ -S "$XDG_RUNTIME_DIR/pipewire-0" ] && break + sleep 0.1 +done + +if [ -S "$XDG_RUNTIME_DIR/pipewire-0" ]; then + echo "nestri-entry: pipewire ready" >&2 + + # WirePlumber needs both PipeWire AND D-Bus + if [ -n "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then + wireplumber & + PIDS+=($!) + sleep 0.5 + echo "nestri-entry: wireplumber ready" >&2 + else + echo "nestri-entry: WARNING — skipping wireplumber (no dbus)" >&2 + echo "nestri-entry: audio routing may not work correctly" >&2 + fi +else + echo "nestri-entry: WARNING — pipewire not ready, continuing without audio" >&2 +fi + +# Wait for WirePlumber to register the loopback node +for i in $(seq 1 50); do + if pw-cli ls Node 2>/dev/null | grep -q "nestri-source"; then + break + fi + sleep 0.1 +done + +if pw-cli ls Node 2>/dev/null | grep -q "nestri-source"; then + echo "nestri-entry: wireplumber ready, loopback node available" >&2 +else + echo "nestri-entry: WARNING — loopback node not found after 5s" >&2 +fi + +# ============================================================ +# 2. GStreamer Pipeline — Encoder Detection & Configuration +# +# VAAPI encoders come in two variants: +# - vaXenc — standard encoder +# - vaXlpenc — low-power variant (sometimes the only option) +# +# We probe for available encoders and use what's present. +# ============================================================ + +# Check if a GStreamer element exists +gst_element_exists() { + gst-inspect-1.0 "$1" &>/dev/null +} + +# Find the best available VAAPI encoder for a codec +find_vaapi_encoder() { + local codec="$1" + local standard_enc="va${codec}enc" + local lowpower_enc="va${codec}lpenc" + + # Prefer standard encoder, fall back to low-power + if gst_element_exists "$standard_enc"; then + echo "$standard_enc" + elif gst_element_exists "$lowpower_enc"; then + echo "$lowpower_enc" + else + echo "" + fi +} + +# ============================================================ +# 2. GStreamer Pipeline — Encoding Configuration +# +# GPU-specific encoding paths: +# +# NVIDIA (NVENC): +# Memory: video/x-raw(memory:CUDAMemory) +# H.264: nvh264enc (p1 preset, ultra-low-latency tune) +# H.265: nvh265enc (p1 preset, ultra-low-latency tune) +# AV1: nvav1enc (p1 preset, ultra-low-latency tune) +# +# Modern NVENC presets (p1-p7): +# p1 = fastest (lowest quality) +# p7 = slowest (highest quality) +# Tunes: ultra-low-latency, low-latency, high-quality +# +# +# Intel (QSV): +# Memory: video/x-raw(memory:DMABuf) → vapostproc → video/x-raw(memory:VAMemory) +# H.264: qsvh264enc +# H.265: qsvh265enc +# AV1: qsvav1enc +# +# target-usage is 7 for all (speed) with low-latency set to true +# +# +# AMD/Intel/.. (VAAPI): +# Memory: video/x-raw(memory:DMABuf) → vapostproc → video/x-raw(memory:VAMemory) +# H.264: vah264enc or vah264lpenc (low-power variant) +# H.265: vah265enc or vah265lpenc (low-power variant) +# AV1: vaav1enc or vaav1lpenc (low-power variant) +# +# target-usage: 1 (quality) to 7 (speed) +# For streaming, we use 7 (maximum speed/minimum latency) +# +# The vapostproc element converts DMA-BUF to VA-API memory and +# transforms to NV12 format required by the VA-API encoders. +# ============================================================ + +# Calculate GOP size (keyframe interval) +# For low latency, we use 1-2 seconds worth of frames +GOP_SIZE=$((NESTRI_FPS * 2)) + +setup_vaapi_encoder() { + # AMD/Intel VAAPI path — uses DMA-BUF → VA-API memory + # vapostproc handles colorspace conversion to NV12 + GST_MEM_CAPS="video/x-raw(memory:DMABuf),width=${NESTRI_WIDTH},height=${NESTRI_HEIGHT},framerate=${NESTRI_FPS}/1 ! vapostproc ! video/x-raw(memory:VAMemory),format=NV12" + + case "$NESTRI_CODEC" in + av1) + VAAPI_ENC=$(find_vaapi_encoder "av1") + if [ -z "$VAAPI_ENC" ]; then + echo "nestri-entry: FATAL — no VAAPI AV1 encoder found" >&2 + echo "nestri-entry: tried: vaav1enc, vaav1penc" >&2 + exit 1 + fi + echo "nestri-entry: using VAAPI encoder: $VAAPI_ENC" >&2 + GST_ENC="$VAAPI_ENC" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC key-int-max=${GOP_SIZE}" + GST_ENC="$GST_ENC target-usage=7" + ;; + h265) + VAAPI_ENC=$(find_vaapi_encoder "h265") + if [ -z "$VAAPI_ENC" ]; then + echo "nestri-entry: FATAL — no VAAPI H.265 encoder found" >&2 + echo "nestri-entry: tried: vah265enc, vah265lpenc" >&2 + exit 1 + fi + echo "nestri-entry: using VAAPI encoder: $VAAPI_ENC" >&2 + GST_ENC="$VAAPI_ENC" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC key-int-max=${GOP_SIZE}" + GST_ENC="$GST_ENC target-usage=7" + ;; + h264|*) + VAAPI_ENC=$(find_vaapi_encoder "h264") + if [ -z "$VAAPI_ENC" ]; then + echo "nestri-entry: FATAL — no VAAPI H.264 encoder found" >&2 + echo "nestri-entry: tried: vah264enc, vah264lpenc" >&2 + exit 1 + fi + echo "nestri-entry: using VAAPI encoder: $VAAPI_ENC" >&2 + GST_ENC="$VAAPI_ENC" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC key-int-max=${GOP_SIZE}" + GST_ENC="$GST_ENC target-usage=7" + ;; + esac +} + +# Select memory caps and encoder based on GPU type +case "$NESTRI_GPU" in + nvidia) + # NVIDIA NVENC path — uses CUDA memory + # Modern presets: p1 (fastest) to p7 (highest quality) + # Tunes: ultra-low-latency, low-latency, high-quality + GST_MEM_CAPS="video/x-raw(memory:CUDAMemory),width=${NESTRI_WIDTH},height=${NESTRI_HEIGHT},framerate=${NESTRI_FPS}/1" + + case "$NESTRI_CODEC" in + av1) + GST_ENC="nvav1enc" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC gop-size=${GOP_SIZE}" + GST_ENC="$GST_ENC preset=p1" + GST_ENC="$GST_ENC tune=ultra-low-latency" + GST_ENC="$GST_ENC multi-pass=disabled" + GST_ENC="$GST_ENC zerolatency=true" + ;; + h265) + GST_ENC="nvh265enc" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC gop-size=${GOP_SIZE}" + GST_ENC="$GST_ENC preset=p1" + GST_ENC="$GST_ENC tune=ultra-low-latency" + GST_ENC="$GST_ENC multi-pass=disabled" + GST_ENC="$GST_ENC zerolatency=true" + ;; + h264|*) + GST_ENC="nvh264enc" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC gop-size=${GOP_SIZE}" + GST_ENC="$GST_ENC preset=p1" + GST_ENC="$GST_ENC tune=ultra-low-latency" + GST_ENC="$GST_ENC multi-pass=disabled" + GST_ENC="$GST_ENC zerolatency=true" + ;; + esac + ;; + + intel) + # Check for QSV element plugin + if gst_element_exists "qsv"; then + # Intel QSV path — uses DMA-BUF → VA-API memory + # vapostproc handles colorspace conversion to NV12 + GST_MEM_CAPS="video/x-raw(memory:DMABuf),width=${NESTRI_WIDTH},height=${NESTRI_HEIGHT},framerate=${NESTRI_FPS}/1 ! vapostproc ! video/x-raw(memory:VAMemory),format=NV12" + + case "$NESTRI_CODEC" in + av1) + GST_ENC="qsvav1enc" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC gop-size=${GOP_SIZE}" + GST_ENC="$GST_ENC target-usage=7" + GST_ENC="$GST_ENC low-latency=true" + ;; + h265) + GST_ENC="qsvh265enc" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC gop-size=${GOP_SIZE}" + GST_ENC="$GST_ENC target-usage=7" + GST_ENC="$GST_ENC low-latency=true" + ;; + h264|*) + GST_ENC="qsvh264enc" + GST_ENC="$GST_ENC bitrate=${NESTRI_BITRATE}" + GST_ENC="$GST_ENC gop-size=${GOP_SIZE}" + GST_ENC="$GST_ENC target-usage=7" + GST_ENC="$GST_ENC low-latency=true" + ;; + esac + else + # Fallback to VAAPI if no QSV available + setup_vaapi_encoder + fi + ;; + + amd|*) + setup_vaapi_encoder + ;; +esac + +# ============================================================ +# 2. GStreamer Pipeline — Launch +# +# Pipeline structure: +# +# Video path: +# waylanddisplaysrc (compositor + capture) +# → queue (buffer management) +# → [GPU-specific caps + encoder] +# → [codec parser] +# +# Audio path: +# pipewiresrc (capture from PipeWire) +# → audioconvert/audiorate/audioresample +# → opusenc (Opus encoding @ 128kbps) +# +# Output: +# nestrisink → QUIC/iroh-moq streaming +# +# waylanddisplaysrc IS the Wayland compositor: +# - Creates socket at $XDG_RUNTIME_DIR/wayland-1 +# - Captures client buffers as DMA-BUF (zero-copy) +# - Input events arrive via nestrisink (bidirectional) +# ============================================================ + +echo "nestri-entry: starting gstreamer pipeline..." >&2 +echo "nestri-entry: resolution: ${NESTRI_WIDTH}x${NESTRI_HEIGHT}@${NESTRI_FPS}fps" >&2 +echo "nestri-entry: bitrate: ${NESTRI_BITRATE}kbps" >&2 +echo "nestri-entry: gop-size: ${GOP_SIZE} frames" >&2 +echo "nestri-entry: render: ${NESTRI_RENDER_NODE}" >&2 +echo "nestri-entry: gpu: ${NESTRI_GPU}" >&2 +echo "nestri-entry: codec: ${NESTRI_CODEC}" >&2 +echo "nestri-entry: encoder: ${GST_ENC%% *}" >&2 +echo "nestri-entry: broadcast: ${NESTRI_BROADCAST}" >&2 + +# Note: GST_MEM_CAPS and GST_ENC are intentionally unquoted +# to allow bash word splitting for GStreamer's '!' element separators. + +gst-launch-1.0 --gst-debug-no-color -e \ + nestrisink name=sink broadcast="$NESTRI_BROADCAST" \ + waylanddisplaysrc render-node="$NESTRI_RENDER_NODE" ! \ + queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! \ + $GST_MEM_CAPS ! \ + $GST_ENC ! \ + sink. \ + pipewiresrc target-object="nestri-source" use-bufferpool=false do-timestamp=true ! \ + queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! \ + "audio/x-raw,format=S16LE,channels=2,rate=48000" ! \ + audioconvert ! \ + audiorate ! \ + audioresample ! \ + opusenc bitrate=128000 frame-size=10 ! \ + sink. \ + >> /tmp/gstreamer.log 2>&1 & + +GST_PID=$! +PIDS+=($GST_PID) + +# Wait for compositor socket +for i in $(seq 1 100); do + [ -S "$XDG_RUNTIME_DIR/wayland-1" ] && break + sleep 0.1 +done + +if [ ! -S "$XDG_RUNTIME_DIR/wayland-1" ]; then + echo "nestri-entry: FATAL — compositor socket not created" >&2 + echo "nestri-entry: check waylanddisplaysrc plugin and GPU access" >&2 + exit 1 +fi + +echo "nestri-entry: wayland compositor ready at $XDG_RUNTIME_DIR/wayland-1" >&2 + +# X_DISPLAY_NUM="12" + +# X_SOCKET="/tmp/.X11-unix/X$X_DISPLAY_NUM" + +# # Launch the XWayland satellite process to handle X11 clients in the VM. +# xwayland-satellite ":$X_DISPLAY_NUM" >> /tmp/x11.log 2>&1 & +# PIDS+=($!) + +# # Wait for X11 socket +# for i in $(seq 1 100); do +# [ -S "$X_SOCKET" ] && break +# sleep 0.1 +# done + +# if [ ! -S "$X_SOCKET" ]; then +# echo "nestri-entry: FATAL — X11 socket $X_SOCKET not created" >&2 +# echo "nestri-entry: check xwayland-satellite logs for startup errors" >&2 +# exit 1 +# fi + +# echo "nestri-entry: X11 server ready at $X_SOCKET" >&2 + +# export DISPLAY=":$X_DISPLAY_NUM" +# ============================================================ +# DNS Setup +# +# passt (muvm's network backend) reads /etc/resolv.conf from +# the bwrap namespace to get DNS servers for the VM's DHCP. +# The rootfs may have a stale or symlinked resolv.conf. +# We overwrite it here with the real DNS from the host. +# +# nestri-init also tries to copy /run/nestri/resolv.conf into +# the VM's /etc/resolv.conf, but that often fails because the +# VM filesystem may be read-only. Fixing it here in the bwrap +# layer ensures passt gets the right servers. +# ============================================================ + +if [ -f /run/nestri/resolv.conf ]; then + # Remove symlink if present, then write directly + rm -f /etc/resolv.conf 2>/dev/null || true + cp /run/nestri/resolv.conf /etc/resolv.conf 2>/dev/null || { + # If /etc is somehow read-only, try writing in-place + cat /run/nestri/resolv.conf > /etc/resolv.conf 2>/dev/null || true + } + echo "nestri-entry: DNS configured:" >&2 + cat /etc/resolv.conf >&2 +fi + +# ============================================================ +# 3. muvm — MicroVM Launch +# +# The VM boots from this same filesystem via virtiofs. +# nestri-init wraps systemd, setting up machine-id, dns, etc. +# +# Guest systemd services (started automatically): +# nestri-network.service — muvm-configure-network (networking) +# nestri-wayland-proxy.* — wl-cross-domain-proxy (socket-activated) +# nestri-pwbridge.* — muvm-pwbridge (socket-activated audio) +# nestri-session-bus.* — dbus-daemon (socket-activated) +# nestri-remote.service — muvm-remote (runs user command) +# +# Cross-domain Wayland proxy: +# The VM guest runs wl-cross-domain-proxy which connects to +# the host's wayland-1 socket via virtio-gpu cross-domain context. +# This allows the guest gamescope to render to the host compositor. +# +# Environment passed to guest: +# WAYLAND_DISPLAY=wayland-1 — compositor socket name +# XDG_RUNTIME_DIR=/run/vm-user — guest runtime directory +# XDG_SESSION_TYPE=wayland — session type hint +# SDL_VIDEODRIVER=wayland — force SDL wayland backend +# SDL_AUDIO_DRIVER=pipewire — force SDL pipewire audio +# NESTRI_* — stream configuration +# ============================================================ +echo "nestri-entry: starting muvm..." >&2 + + # -e "SDL_VIDEODRIVER=wayland" \ + # -e "ELECTRON_OZONE_PLATFORM_HINT=wayland" \ + # -e "_JAVA_AWT_WM_NONREPARENTING=1" \ + # -e "QT_QPA_PLATFORM=wayland" \ + +muvm \ + --custom-init-cmdline "nestri-init /sbin/init --echo-target=console" \ + -e "container=muvm" \ + -e "XDG_SESSION_TYPE=wayland" \ + -e "XDG_RUNTIME_DIR=/run/vm-user" \ + -e "SDL_AUDIO_DRIVER=pipewire" \ + -e "WAYLAND_DISPLAY=wayland-1" \ + -e "VK_DRIVER_FILES=$VK_DRIVER_FILES" \ + -e "NESTRI_WIDTH=$NESTRI_WIDTH" \ + -e "NESTRI_HEIGHT=$NESTRI_HEIGHT" \ + -e "NESTRI_FPS=$NESTRI_FPS" \ + -e "MICROVM_UID=$MICROVM_UID" \ + -e "MICROVM_GID=${MICROVM_GID:-$MICROVM_UID}" \ + -e "BOOT_TIME_OFFSET=${BOOT_TIME_OFFSET:-}" \ + -i -t \ + "$@" + +MUVM_EXIT=$? + +echo "nestri-entry: muvm exited with code $MUVM_EXIT" >&2 + +exit $MUVM_EXIT +# /usr/bin/steam -gamepadui -cef-force-gpu & +# STEAM_PID=$! +# PIDS+=($STEAM_PID) + +# wait $STEAM_PID diff --git a/build/usr/bin/nestri-init b/build/usr/bin/nestri-init new file mode 100644 index 00000000..c154c6b7 --- /dev/null +++ b/build/usr/bin/nestri-init @@ -0,0 +1,93 @@ +#!/bin/bash +set -e + +# ============================================================ +# 1. Save files from old /run +# ============================================================ +_resolv="" +_localtime="" +[ -f /run/nestri/resolv.conf ] && _resolv=$(cat /run/nestri/resolv.conf) +[ -f /run/nestri/localtime ] && _localtime=$(base64 /run/nestri/localtime 2>/dev/null) || true + +# ============================================================ +# 2. Fresh tmpfs on /run +# ============================================================ +mount -t tmpfs tmpfs /run -o nosuid,nodev,strictatime + +# ============================================================ +# 3. Restore saved files +# ============================================================ +if [ -n "$_resolv" ]; then + echo "$_resolv" > /run/resolv.conf + echo "$_resolv" > /etc/resolv.conf 2>/dev/null || true +fi +if [ -n "$_localtime" ]; then + echo "$_localtime" | base64 -d > /run/localtime + echo "$_localtime" | base64 -d > /etc/localtime 2>/dev/null || true +fi + +# ============================================================ +# 4. Machine ID +# ============================================================ +# FIXME(wanjohiryan): Use the same machine-id as the host? For Steam, i believe it does check machine id and stuff like that for SteamGuard +if [ ! -s /etc/machine-id ]; then + head -c 16 /dev/urandom | od -A n -t x1 | tr -d ' \n' > /etc/machine-id + echo "" >> /etc/machine-id +fi + +# ============================================================ +# 5. Journald +# ============================================================ +mkdir -p /run/systemd/journal /run/log/journal + +mkdir -p /etc/systemd/system/systemd-journald.service.d +cat > /etc/systemd/system/systemd-journald.service.d/override.conf << 'EOF' +[Service] +RuntimeDirectory= +LogsDirectory= +StateDirectory= +ExecStartPre=/bin/mkdir -p /run/systemd/journal /run/log/journal +EOF + +# ============================================================ +# 6. Hide container FILE markers (ro rootfs) +# But DO NOT strip the `container` env var! +# systemd needs it for exit.target (clean shutdown). +# ============================================================ +for marker in /.dockerenv /run/.containerenv; do + if [ -e "$marker" ]; then + mount --bind /dev/null "$marker" 2>/dev/null || true + fi +done + +# ============================================================ +# 8. Isolate X11 socket directory +# ============================================================ +if [ -d /tmp/.X11-unix ]; then + mount -t tmpfs tmpfs /tmp/.X11-unix -o noexec,nosuid,relatime +fi + +# ============================================================ +# 9. Remount /dev/shm as virtiofs with DAX +# (required for cross-domain shared memory, DRI3 fences) +# ============================================================ +umount /dev/shm +mount -t virtiofs devshm /dev/shm -o noexec,nosuid,dax + +# ============================================================ +# 10. Boot time offset +# ============================================================ +if [ -n "$BOOT_TIME_OFFSET" ]; then + if unshare --time true 2>/dev/null; then + exec unshare --time -- bash -c ' + echo "monotonic '"$BOOT_TIME_OFFSET"'" > /proc/self/timens_offsets 2>/dev/null + echo "boottime '"$BOOT_TIME_OFFSET"'" >> /proc/self/timens_offsets 2>/dev/null + exec "$@" + ' -- "$@" + fi +fi + +# ============================================================ +# 11. Hand off to systemd +# ============================================================ +exec "$@" diff --git a/build/usr/bin/steam-token.exe b/build/usr/bin/steam-token.exe new file mode 100755 index 00000000..c1e3c4f0 Binary files /dev/null and b/build/usr/bin/steam-token.exe differ diff --git a/bun.lock b/bun.lock deleted file mode 100644 index d25adf25..00000000 --- a/bun.lock +++ /dev/null @@ -1,5237 +0,0 @@ -{ - "lockfileVersion": 1, - "configVersion": 0, - "workspaces": { - "": { - "name": "nestri", - "dependencies": { - "sst": "^3.17.13", - }, - "devDependencies": { - "@cloudflare/workers-types": "4.20240821.1", - "@pulumi/pulumi": "^3.134.0", - "@tsconfig/node22": "^22.0.1", - "@types/aws-lambda": "8.10.147", - "prettier": "^3.2.5", - "typescript": "^5.4.5", - }, - }, - "cloud/packages/core": { - "name": "@nestri/core", - "version": "0.0.0", - "dependencies": { - "@aws-sdk/client-iot-data-plane": "^3.758.0", - "@aws-sdk/client-sesv2": "^3.753.0", - "@neondatabase/serverless": "^1.0.1", - "@openauthjs/openauth": "*", - "@openauthjs/openevent": "^0.0.27", - "@polar-sh/sdk": "^0.26.1", - "drizzle-kit": "^0.30.5", - "drizzle-orm": "^0.40.0", - "drizzle-zod": "^0.7.1", - "fast-average-color": "^9.5.0", - "lru-cache": "^11.1.0", - "p-limit": "^6.2.0", - "pixelmatch": "^7.1.0", - "pngjs": "^7.0.0", - "postgres": "^3.4.5", - "sanitize-html": "^2.16.0", - "sharp": "^0.34.1", - "steam-session": "*", - "ws": "^8.18.3", - "xml2js": "^0.6.2", - }, - "devDependencies": { - "@tsconfig/node20": "^20.1.4", - "@types/pngjs": "^6.0.5", - "@types/sanitize-html": "^2.16.0", - "@types/xml2js": "^0.4.14", - "aws-iot-device-sdk-v2": "^1.21.1", - "aws4fetch": "^1.0.20", - "mqtt": "^5.10.3", - "remeda": "^2.21.2", - "ulid": "^2.3.0", - "zod": "^3.24.1", - "zod-openapi": "^4.2.2", - }, - }, - "cloud/packages/functions": { - "name": "@nestri/functions", - "dependencies": { - "@actor-core/bun": "^0.8.0", - "@actor-core/file-system": "^0.8.0", - "@aws-sdk/client-lambda": "^3.821.0", - "@aws-sdk/client-s3": "^3.806.0", - "@aws-sdk/client-sqs": "^3.806.0", - "@nestri/core": "workspace:", - "@openauthjs/openauth": "catalog:", - "actor-core": "^0.8.0", - "hono": "^4.7.8", - "hono-openapi": "^0.4.8", - "steam-session": "*", - "steamcommunity": "^3.48.6", - "steamid": "^2.1.0", - }, - "devDependencies": { - "@cloudflare/workers-types": "4.20250522.0", - "@types/bun": "latest", - "@types/steamcommunity": "^3.43.8", - }, - "peerDependencies": { - "typescript": "^5", - }, - }, - "cloud/packages/maitred": { - "name": "@nestri/maitred", - "version": "0.1.0", - }, - "packages/input": { - "name": "@nestri/input", - "version": "0.0.0", - "dependencies": { - "@bufbuild/protobuf": "^2.10.0", - "@chainsafe/libp2p-noise": "^17.0.0", - "@chainsafe/libp2p-quic": "^1.1.3", - "@chainsafe/libp2p-yamux": "^8.0.1", - "@libp2p/identify": "^4.0.5", - "@libp2p/interface": "^3.0.2", - "@libp2p/ping": "^3.0.5", - "@libp2p/utils": "^7.0.5", - "@libp2p/websockets": "^10.0.6", - "@libp2p/webtransport": "^6.0.7", - "@multiformats/multiaddr": "^13.0.1", - "libp2p": "^3.0.6", - "uint8arraylist": "^2.4.8", - }, - "devDependencies": { - "@bufbuild/buf": "^1.59.0", - "@bufbuild/protoc-gen-es": "^2.10.0", - }, - }, - "packages/moq": { - "name": "@nestri/libmoq", - "version": "0.1.4", - "devDependencies": { - "@types/audioworklet": "^0.0.50", - "@types/dom-mediacapture-transform": "^0.1.6", - "@types/dom-webcodecs": "^0.1.8", - "@typescript/lib-dom": "npm:@types/web@^0.0.115", - "typescript": "^5.1.6", - }, - }, - "packages/play-standalone": { - "name": "play-standalone", - "version": "0.0.1", - "dependencies": { - "@astrojs/node": "9.5.0", - "@nestri/input": "*", - "astro": "5.15.1", - }, - }, - "packages/www": { - "name": "@nestri/www", - "dependencies": { - "@fontsource-variable/geist-mono": "^5.0.1", - "@fontsource-variable/mona-sans": "^5.0.1", - "@fontsource/geist-sans": "^5.1.0", - "@macaron-css/core": "1.5.1", - "@macaron-css/solid": "1.5.3", - "@modular-forms/solid": "^0.25.1", - "@nestri/core": "*", - "@nestri/functions": "*", - "@nestri/zero": "*", - "@openauthjs/openauth": "*", - "@openauthjs/solid": "0.0.0-20250311201457", - "@rocicorp/zero": "0.20.2025051800", - "@solid-primitives/event-listener": "^2.4.0", - "@solid-primitives/storage": "^4.3.1", - "@solidjs/router": "^0.15.3", - "body-scroll-lock-upgrade": "^1.1.0", - "eventsource": "^3.0.5", - "fast-average-color": "9.5.0", - "focus-trap": "^7.6.4", - "hono": "^4.7.4", - "modern-normalize": "^3.0.1", - "motion": "^12.6.2", - "qrcode": "^1.5.4", - "solid-js": "^1.9.5", - "valibot": "^1.0.0-rc.3", - "zod": "^3.24.2", - }, - "devDependencies": { - "@macaron-css/vite": "1.5.1", - "@types/bun": "latest", - "@types/qrcode": "^1.5.5", - "vite": "6.1.6", - "vite-plugin-solid": "^2.11.2", - }, - "peerDependencies": { - "typescript": "^5.0.0", - }, - }, - "packages/zero": { - "name": "@nestri/zero", - "version": "0.0.0", - "dependencies": { - "@nestri/core": "*", - "@rocicorp/zero": "0.20.2025051800", - }, - }, - }, - "trustedDependencies": [ - "esbuild", - "@rocicorp/zero-sqlite3", - "protobufjs", - ], - "catalog": { - "@openauthjs/openauth": "0.0.0-20250322224806", - "steam-session": "1.9.3", - }, - "packages": { - "@actor-core/bun": ["@actor-core/bun@0.8.0", "", { "dependencies": { "dedent": "^1.5.3", "zod": "^3.24.2" }, "peerDependencies": { "@actor-core/file-system": "*", "@actor-core/memory": "*", "actor-core": "*" } }, "sha512-p4HfeCwvPgSOtMqDFIJsZlqsKhLlUqh+TnlvJVG/PQWDlHRCTh168z5v0TDJAbn7t12SjRpzozz8LbeaBw+haw=="], - - "@actor-core/file-system": ["@actor-core/file-system@0.8.0", "", { "dependencies": { "env-paths": "^3.0.0", "hono": "^4.7.0", "invariant": "^2.2.4" }, "peerDependencies": { "actor-core": "*" } }, "sha512-0V8vidW06LhR8NIgtgyIhWHGL6oLBdJU3tBXjSFw/qYtiBGiZX+ipqTorOG9yeo5BX0+4i43CQb7o0H7tB45HA=="], - - "@actor-core/memory": ["@actor-core/memory@0.7.9", "", { "dependencies": { "@types/node": "^22.13.1", "hono": "^4.7.0" }, "peerDependencies": { "actor-core": "*" } }, "sha512-oEVMCYqB/1T5I4IYHy5khZ3QjBmD57pBtmnHvnmm3Lu9tlToIGuO1dfYHAvotmEnsayiegE1uKfCuU2CCsMisA=="], - - "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], - - "@apidevtools/json-schema-ref-parser": ["@apidevtools/json-schema-ref-parser@11.9.3", "", { "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0" } }, "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ=="], - - "@ark/schema": ["@ark/schema@0.25.0", "", { "dependencies": { "@ark/util": "0.25.0" } }, "sha512-1Air2M9Je8C/4+YNhJ1QPkoFbERX3PhulDVNW1RmpOpyUjUSM5lcuuyq357jp3a7+M3a5RV2PNdI1XZ/ah8l8Q=="], - - "@ark/util": ["@ark/util@0.25.0", "", {}, "sha512-yo2Me+tYnmr6E0E3maZzu643/rL07oR25yBHkH24gllssqYcd6EPCvZE23GEKgbk0iac9J73GlJ9pkgZj43Q2g=="], - - "@astrojs/compiler": ["@astrojs/compiler@2.12.2", "", {}, "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw=="], - - "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.4", "", {}, "sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw=="], - - "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.8", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.4", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.13.0", "smol-toml": "^1.4.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-uFNyFWadnULWK2cOw4n0hLKeu+xaVWeuECdP10cQ3K2fkybtTlhb7J7TcScdjmS8Yps7oje9S/ehYMfZrhrgCg=="], - - "@astrojs/node": ["@astrojs/node@9.5.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.4", "send": "^1.2.0", "server-destroy": "^1.0.1" }, "peerDependencies": { "astro": "^5.14.3" } }, "sha512-x1whLIatmCefaqJA8FjfI+P6FStF+bqmmrib0OUGM1M3cZhAXKLgPx6UF2AzQ3JgpXgCWYM24MHtraPvZhhyLQ=="], - - "@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], - - "@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="], - - "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], - - "@aws-crypto/crc32c": ["@aws-crypto/crc32c@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], - - "@aws-crypto/sha1-browser": ["@aws-crypto/sha1-browser@5.2.0", "", { "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg=="], - - "@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="], - - "@aws-crypto/sha256-js": ["@aws-crypto/sha256-js@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="], - - "@aws-crypto/supports-web-crypto": ["@aws-crypto/supports-web-crypto@5.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="], - - "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - - "@aws-sdk/client-iot-data-plane": ["@aws-sdk/client-iot-data-plane@3.782.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.775.0", "@aws-sdk/credential-provider-node": "3.782.0", "@aws-sdk/middleware-host-header": "3.775.0", "@aws-sdk/middleware-logger": "3.775.0", "@aws-sdk/middleware-recursion-detection": "3.775.0", "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/region-config-resolver": "3.775.0", "@aws-sdk/types": "3.775.0", "@aws-sdk/util-endpoints": "3.782.0", "@aws-sdk/util-user-agent-browser": "3.775.0", "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.0", "@smithy/middleware-retry": "^4.1.0", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.8", "@smithy/util-defaults-mode-node": "^4.0.8", "@smithy/util-endpoints": "^3.0.2", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-U9KpNxCfSzEmzXCVsN81HMWLHVgMeIYpt9Pey0GSStaZhWxVklRbCfq95Rpg3X1zr5IDLSVFXlRFgVE+m4GdMA=="], - - "@aws-sdk/client-lambda": ["@aws-sdk/client-lambda@3.821.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.821.0", "@aws-sdk/credential-provider-node": "3.821.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", "@aws-sdk/middleware-user-agent": "3.821.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.821.0", "@aws-sdk/util-user-agent-browser": "3.821.0", "@aws-sdk/util-user-agent-node": "3.821.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.5.1", "@smithy/eventstream-serde-browser": "^4.0.4", "@smithy/eventstream-serde-config-resolver": "^4.1.2", "@smithy/eventstream-serde-node": "^4.0.4", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", "@smithy/middleware-endpoint": "^4.1.9", "@smithy/middleware-retry": "^4.1.10", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.17", "@smithy/util-defaults-mode-node": "^4.0.17", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.5", "@smithy/util-stream": "^4.2.2", "@smithy/util-utf8": "^4.0.0", "@smithy/util-waiter": "^4.0.5", "tslib": "^2.6.2" } }, "sha512-251WeT6d0L5EmpIMAhi3C9ujDftG9TEuzt78A8cW4EQp6BZrVTZFG+FZi+Yef06AUQRdZWY1rUx4nE6WOl6Hkw=="], - - "@aws-sdk/client-rds-data": ["@aws-sdk/client-rds-data@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/credential-provider-node": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ZWgYB23xZISun31m1QjIq+OmKuKwhJj7JDS1OjfGtMjdn+uIAlxdr5cR9TZOMqsHkqJDV2YaPQ5+XRXnUEAZSA=="], - - "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.806.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/credential-provider-node": "3.806.0", "@aws-sdk/middleware-bucket-endpoint": "3.806.0", "@aws-sdk/middleware-expect-continue": "3.804.0", "@aws-sdk/middleware-flexible-checksums": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-location-constraint": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-sdk-s3": "3.806.0", "@aws-sdk/middleware-ssec": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/signature-v4-multi-region": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@aws-sdk/xml-builder": "3.804.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/eventstream-serde-browser": "^4.0.2", "@smithy/eventstream-serde-config-resolver": "^4.1.0", "@smithy/eventstream-serde-node": "^4.0.2", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-blob-browser": "^4.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/hash-stream-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/md5-js": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "@smithy/util-waiter": "^4.0.3", "tslib": "^2.6.2" } }, "sha512-kQaBBBxEBU/IJ2wKG+LL2BK+uvBwpdvOA9jy1WhW+U2/DIMwMrjVs7M/ZvTlmVOJwhZaONcJbgQqsN4Yirjj4g=="], - - "@aws-sdk/client-sesv2": ["@aws-sdk/client-sesv2@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/credential-provider-node": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/signature-v4-multi-region": "3.758.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-d10Q8Dv546obtrre0QfUdWVio7tpt1Pb8h/K1rOG5B+0gYkG4OdWQ0G6MOQ1PXSF2DEj1wWgy77MzEC88dFEiA=="], - - "@aws-sdk/client-sqs": ["@aws-sdk/client-sqs@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/credential-provider-node": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-sdk-sqs": "3.806.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/md5-js": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-JvoLtAa+mS8N90smkAg7lYVi/tdV1JbGrPoRJYLOGpA6N2mn7Atv580dWTJQ3m4lhmTgBJjVnMlo3AN/UJ+VIA=="], - - "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.782.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.775.0", "@aws-sdk/middleware-host-header": "3.775.0", "@aws-sdk/middleware-logger": "3.775.0", "@aws-sdk/middleware-recursion-detection": "3.775.0", "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/region-config-resolver": "3.775.0", "@aws-sdk/types": "3.775.0", "@aws-sdk/util-endpoints": "3.782.0", "@aws-sdk/util-user-agent-browser": "3.775.0", "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.0", "@smithy/middleware-retry": "^4.1.0", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.8", "@smithy/util-defaults-mode-node": "^4.0.8", "@smithy/util-endpoints": "^3.0.2", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-5GlJBejo8wqMpSSEKb45WE82YxI2k73YuebjLH/eWDNQeE6VI5Bh9lA1YQ7xNkLLH8hIsb0pSfKVuwh0VEzVrg=="], - - "@aws-sdk/core": ["@aws-sdk/core@3.775.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/core": "^3.2.0", "@smithy/node-config-provider": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.0.2", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA=="], - - "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.775.0", "", { "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw=="], - - "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.775.0", "", { "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/types": "3.775.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww=="], - - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.782.0", "", { "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/credential-provider-env": "3.775.0", "@aws-sdk/credential-provider-http": "3.775.0", "@aws-sdk/credential-provider-process": "3.775.0", "@aws-sdk/credential-provider-sso": "3.782.0", "@aws-sdk/credential-provider-web-identity": "3.782.0", "@aws-sdk/nested-clients": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-wd4KdRy2YjLsE4Y7pz00470Iip06GlRHkG4dyLW7/hFMzEO2o7ixswCWp6J2VGZVAX64acknlv2Q0z02ebjmhw=="], - - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.782.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.775.0", "@aws-sdk/credential-provider-http": "3.775.0", "@aws-sdk/credential-provider-ini": "3.782.0", "@aws-sdk/credential-provider-process": "3.775.0", "@aws-sdk/credential-provider-sso": "3.782.0", "@aws-sdk/credential-provider-web-identity": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-HZiAF+TCEyKjju9dgysjiPIWgt/+VerGaeEp18mvKLNfgKz1d+/82A2USEpNKTze7v3cMFASx3CvL8yYyF7mJw=="], - - "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.775.0", "", { "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg=="], - - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.782.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.782.0", "@aws-sdk/core": "3.775.0", "@aws-sdk/token-providers": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1y1ucxTtTIGDSNSNxriQY8msinilhe9gGvQpUDYW9gboyC7WQJPDw66imy258V6osdtdi+xoHzVCbCz3WhosMQ=="], - - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.782.0", "", { "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/nested-clients": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-xCna0opVPaueEbJoclj5C6OpDNi0Gynj+4d7tnuXGgQhTHPyAz8ZyClkVqpi5qvHTgxROdUEDxWqEO5jqRHZHQ=="], - - "@aws-sdk/middleware-bucket-endpoint": ["@aws-sdk/middleware-bucket-endpoint@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@aws-sdk/util-arn-parser": "3.804.0", "@smithy/node-config-provider": "^4.1.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ACjuyKJw9OZl8z8HzPEaqn1o7ElVW94mowyoZvyUIDouwAPGqPGJbJ5V35qx1oDTFSAJX+N3O3AO6RyFc8nUhw=="], - - "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA=="], - - "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.806.0", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.1.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YEmuU2Nr/+blhi70gS38fnCe2IoL6OVVZXMp4MbzqZRUqeBbnxZhHQrd5YOiboJz7iq+g98xwFebHY167iejcg=="], - - "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.775.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w=="], - - "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-AMtKnllIWKgoo7hiJfphLYotEwTERfjVMO2+cKAncz9w1g+bnYhHxiVhJJoR94y047c06X4PU5MsTxvdQ73Znw=="], - - "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.775.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw=="], - - "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.775.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA=="], - - "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-arn-parser": "3.804.0", "@smithy/core": "^3.3.1", "@smithy/node-config-provider": "^4.1.0", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-K1ssdovHH/kPN9EUS1LznwzoL+r89Cx8qAkp0K8MqdCQuBjZ0KRnjvo9nx69Vg5d/rg01VYTxomFUPXfcPtVXw=="], - - "@aws-sdk/middleware-sdk-sqs": ["@aws-sdk/middleware-sdk-sqs@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-UHZKudmpl0nquq4iSSMKtypM3RFsybXiagd0mYmBpjG1Jw2oS/7NC4VFmxSnUC3jg8yXY4N9qu658Z4u9OMBDg=="], - - "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA=="], - - "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.782.0", "", { "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/types": "3.775.0", "@aws-sdk/util-endpoints": "3.782.0", "@smithy/core": "^3.2.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-i32H2R6IItX+bQ2p4+v2gGO2jA80jQoJO2m1xjU9rYWQW3+ErWy4I5YIuQHTBfb6hSdAHbaRfqPDgbv9J2rjEg=="], - - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.782.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.775.0", "@aws-sdk/middleware-host-header": "3.775.0", "@aws-sdk/middleware-logger": "3.775.0", "@aws-sdk/middleware-recursion-detection": "3.775.0", "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/region-config-resolver": "3.775.0", "@aws-sdk/types": "3.775.0", "@aws-sdk/util-endpoints": "3.782.0", "@aws-sdk/util-user-agent-browser": "3.775.0", "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.0", "@smithy/middleware-retry": "^4.1.0", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.8", "@smithy/util-defaults-mode-node": "^4.0.8", "@smithy/util-endpoints": "^3.0.2", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA=="], - - "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.775.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/node-config-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ=="], - - "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.758.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw=="], - - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.782.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-4tPuk/3+THPrzKaXW4jE2R67UyGwHLFizZ47pcjJWbhb78IIJAy94vbeqEQ+veS84KF5TXcU7g5jGTXC0D70Wg=="], - - "@aws-sdk/types": ["@aws-sdk/types@3.775.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA=="], - - "@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.804.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ=="], - - "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.782.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/types": "^4.2.0", "@smithy/util-endpoints": "^3.0.2", "tslib": "^2.6.2" } }, "sha512-/RJOAO7o7HI6lEa4ASbFFLHGU9iPK876BhsVfnl54MvApPVYWQ9sHO0anOUim2S5lQTwd/6ghuH3rFYSq/+rdw=="], - - "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.723.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw=="], - - "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.775.0", "", { "dependencies": { "@aws-sdk/types": "3.775.0", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A=="], - - "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.782.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/node-config-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-dMFkUBgh2Bxuw8fYZQoH/u3H4afQ12VSkzEi//qFiDTwbKYq+u+RYjc8GLDM6JSK1BShMu5AVR7HD4ap1TYUnA=="], - - "@aws-sdk/util-utf8-browser": ["@aws-sdk/util-utf8-browser@3.259.0", "", { "dependencies": { "tslib": "^2.3.1" } }, "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw=="], - - "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-JbGWp36IG9dgxtvC6+YXwt5WDZYfuamWFtVfK6fQpnmL96dx+GUPOXPKRWdw67WLKf2comHY28iX2d3z35I53Q=="], - - "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], - - "@babel/compat-data": ["@babel/compat-data@7.26.8", "", {}, "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ=="], - - "@babel/core": ["@babel/core@7.26.9", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.9", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.9", "@babel/parser": "^7.26.9", "@babel/template": "^7.26.9", "@babel/traverse": "^7.26.9", "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw=="], - - "@babel/generator": ["@babel/generator@7.26.9", "", { "dependencies": { "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg=="], - - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.25.9", "", { "dependencies": { "@babel/types": "^7.25.9" } }, "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g=="], - - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.26.5", "", { "dependencies": { "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA=="], - - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.26.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/helper-replace-supers": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/traverse": "^7.26.9", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg=="], - - "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ=="], - - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw=="], - - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw=="], - - "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.25.9", "", { "dependencies": { "@babel/types": "^7.25.9" } }, "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ=="], - - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], - - "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.26.5", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/traverse": "^7.26.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg=="], - - "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA=="], - - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], - - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="], - - "@babel/helpers": ["@babel/helpers@7.26.9", "", { "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA=="], - - "@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="], - - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA=="], - - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ=="], - - "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.26.3", "", { "dependencies": { "@babel/helper-module-transforms": "^7.26.0", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ=="], - - "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.26.8", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw=="], - - "@babel/preset-typescript": ["@babel/preset-typescript@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-syntax-jsx": "^7.25.9", "@babel/plugin-transform-modules-commonjs": "^7.25.9", "@babel/plugin-transform-typescript": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg=="], - - "@babel/runtime": ["@babel/runtime@7.26.9", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg=="], - - "@babel/template": ["@babel/template@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA=="], - - "@babel/traverse": ["@babel/traverse@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.9", "@babel/parser": "^7.26.9", "@babel/template": "^7.26.9", "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg=="], - - "@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="], - - "@badrap/valita": ["@badrap/valita@0.3.11", "", {}, "sha512-oak0W8bycFjnrLeVCVvZqkOWTGh74wCPKUxGLJyhRukRs+V/hQdfZp1eDcQE4Gf3UrtJWfR/Ou4Xe0DZqJZ2FA=="], - - "@bufbuild/buf": ["@bufbuild/buf@1.59.0", "", { "optionalDependencies": { "@bufbuild/buf-darwin-arm64": "1.59.0", "@bufbuild/buf-darwin-x64": "1.59.0", "@bufbuild/buf-linux-aarch64": "1.59.0", "@bufbuild/buf-linux-armv7": "1.59.0", "@bufbuild/buf-linux-x64": "1.59.0", "@bufbuild/buf-win32-arm64": "1.59.0", "@bufbuild/buf-win32-x64": "1.59.0" }, "bin": { "buf": "bin/buf", "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint" } }, "sha512-VdLuGnFp1OKJaiMevlLow6Jcvv9omOyM02Qa1zexl8dBB4Ac2ggz6bpT3Zb06tmCnqd8tFrI/Im1fbom3CznlQ=="], - - "@bufbuild/buf-darwin-arm64": ["@bufbuild/buf-darwin-arm64@1.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-d3JTxBCibC+C94JU0jwLMgo/WBhaAHBIRzZXaZ3Y8KREjTj3jhzAlelGZmCtQJyyE0l6DFSm3lQgMblJ5qlq/w=="], - - "@bufbuild/buf-darwin-x64": ["@bufbuild/buf-darwin-x64@1.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-eFnFB96GM6KjP5S8QFqjufjlMF41CVnXjkR8cIfR5jUXdwl1vf5S82Zv+cK1+Uogqhmt7AVBntd5Z+xmz4NKaw=="], - - "@bufbuild/buf-linux-aarch64": ["@bufbuild/buf-linux-aarch64@1.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-g6DxTcJM29SBvqe42ll7HpkmTfecuG+PZYTysaxON9Y59fwtflhuLDpNqGhxWehHMkH11bFfpNeCGKjpGbVvkw=="], - - "@bufbuild/buf-linux-armv7": ["@bufbuild/buf-linux-armv7@1.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-C92s+gmKnAyCzN7MdbtukRXOiW7e0hkeQrOie17vF6qWXPk2r9ix0WXZvg5gZr9R4zD8pOYwRVwYiB9zFXZOaA=="], - - "@bufbuild/buf-linux-x64": ["@bufbuild/buf-linux-x64@1.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Pzc3TFm1t2fZ5uT7jkYBjyuLNKo5ji/wRl/lLLvOlTFRyqsSZBkFNQcJGHoHSej1yDWau16VMrAh0GN1rZfvAg=="], - - "@bufbuild/buf-win32-arm64": ["@bufbuild/buf-win32-arm64@1.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-hS5VThgYNqbMFgY9SibDA/RXBdegw12jgrT2H+Tzaa2rvlSADck9ZAq9rwf2H0IvFJOqtR75Lejb+5Fx2rThpQ=="], - - "@bufbuild/buf-win32-x64": ["@bufbuild/buf-win32-x64@1.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-JAGSF3oaKC2L/TelqvjB1N7oB5pTiviVr8mxiaxHyv4HpvcxCVdiO+iw0goRhZb4QHhYYswk2gLMezWHBxtR/g=="], - - "@bufbuild/protobuf": ["@bufbuild/protobuf@2.10.0", "", {}, "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ=="], - - "@bufbuild/protoc-gen-es": ["@bufbuild/protoc-gen-es@2.10.0", "", { "dependencies": { "@bufbuild/protobuf": "2.10.0", "@bufbuild/protoplugin": "2.10.0" }, "bin": { "protoc-gen-es": "bin/protoc-gen-es" } }, "sha512-g3xtuxeMkbacn8/qWQ8NbHBA8unLAvGD7sjcXV1/lfO4iCfd6hYL1Z+rn2yLQZE/JEkG+GPZoIs7m5KI5VYaMw=="], - - "@bufbuild/protoplugin": ["@bufbuild/protoplugin@2.10.0", "", { "dependencies": { "@bufbuild/protobuf": "2.10.0", "@typescript/vfs": "^1.5.2", "typescript": "5.4.5" } }, "sha512-GPJOZ1Gp9/Ci3MXP3yI7+q4G7IhB5cSpbLjsfnBILxtNx69I9+ix3r9P7JfewHvqMjtPe6L+YWX1LPBGNfZMGw=="], - - "@capsizecss/unpack": ["@capsizecss/unpack@3.0.0", "", { "dependencies": { "fontkit": "^2.0.2" } }, "sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA=="], - - "@cbor-extract/cbor-extract-darwin-arm64": ["@cbor-extract/cbor-extract-darwin-arm64@2.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w=="], - - "@cbor-extract/cbor-extract-darwin-x64": ["@cbor-extract/cbor-extract-darwin-x64@2.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w=="], - - "@cbor-extract/cbor-extract-linux-arm": ["@cbor-extract/cbor-extract-linux-arm@2.2.0", "", { "os": "linux", "cpu": "arm" }, "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q=="], - - "@cbor-extract/cbor-extract-linux-arm64": ["@cbor-extract/cbor-extract-linux-arm64@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ=="], - - "@cbor-extract/cbor-extract-linux-x64": ["@cbor-extract/cbor-extract-linux-x64@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw=="], - - "@cbor-extract/cbor-extract-win32-x64": ["@cbor-extract/cbor-extract-win32-x64@2.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w=="], - - "@chainsafe/as-chacha20poly1305": ["@chainsafe/as-chacha20poly1305@0.1.0", "", {}, "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew=="], - - "@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.2.0", "", {}, "sha512-H2BNHQ5C3RS+H0ZvOdovK6GjFAyq5T6LClad8ivwj9Oaiy28uvdsGVS7gNJKuZmg0FGHAI+n7F0Qju6U0QkKDA=="], - - "@chainsafe/is-ip": ["@chainsafe/is-ip@2.1.0", "", {}, "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w=="], - - "@chainsafe/libp2p-noise": ["@chainsafe/libp2p-noise@17.0.0", "", { "dependencies": { "@chainsafe/as-chacha20poly1305": "^0.1.0", "@chainsafe/as-sha256": "^1.2.0", "@libp2p/crypto": "^5.1.9", "@libp2p/interface": "^3.0.0", "@libp2p/peer-id": "^6.0.0", "@libp2p/utils": "^7.0.0", "@noble/ciphers": "^2.0.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0", "wherearewe": "^2.0.1" } }, "sha512-vwrmY2Y+L1xYhIDiEpl61KHxwrLCZoXzTpwhyk34u+3+6zCAZPL3GxH3i2cs+u5IYNoyLptORdH17RKFXy7upA=="], - - "@chainsafe/libp2p-quic": ["@chainsafe/libp2p-quic@1.1.3", "", { "dependencies": { "@libp2p/crypto": "^5.1.7", "@libp2p/interface": "^2.10.5", "@libp2p/utils": "^6.7.1", "@multiformats/multiaddr": "^12.4.0", "@multiformats/multiaddr-matcher": "^2.0.1", "it-stream-types": "^2.0.2", "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8" }, "optionalDependencies": { "@chainsafe/libp2p-quic-darwin-arm64": "1.1.3", "@chainsafe/libp2p-quic-darwin-x64": "1.1.3", "@chainsafe/libp2p-quic-linux-arm64-gnu": "1.1.3", "@chainsafe/libp2p-quic-linux-arm64-musl": "1.1.3", "@chainsafe/libp2p-quic-linux-x64-gnu": "1.1.3", "@chainsafe/libp2p-quic-linux-x64-musl": "1.1.3", "@chainsafe/libp2p-quic-win32-x64-msvc": "1.1.3" } }, "sha512-Y9F2vGPW5ZhvYYAcDC4dF6i92h+pch+BAXC1yfO2AX2KLyg8rVlECOkEffeStp06DL4knPZLN+Qi10EgOVfwwA=="], - - "@chainsafe/libp2p-quic-darwin-arm64": ["@chainsafe/libp2p-quic-darwin-arm64@1.1.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-L9Ta/CalkCiKC910thxR6GfqD0Tmm8QfSbZ5eTY7sGUuYYeE5/73UOlNzVHZxEWid7uceYHBYETTAUkdSsy+RQ=="], - - "@chainsafe/libp2p-quic-darwin-x64": ["@chainsafe/libp2p-quic-darwin-x64@1.1.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-hxE4wL/PQop/r6OLpzeJJ3c4WDtfk7zWBKhX2Zjul0jHc5v04a1DRTEmugooaqeU7UNnBQkBsqiHcA8efuhNqg=="], - - "@chainsafe/libp2p-quic-linux-arm64-gnu": ["@chainsafe/libp2p-quic-linux-arm64-gnu@1.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-XUyafb32UHdkuhgNYATnoBj81YfRlVl1MDW+OPHD3XPsIYkloUHlPD9Y2cBH9m17K0lvhe/3KndeQ3WLZ2syNA=="], - - "@chainsafe/libp2p-quic-linux-arm64-musl": ["@chainsafe/libp2p-quic-linux-arm64-musl@1.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-cmYfa3heaSUN/ts4P1Y1N72Oi7frQdufDC8KzBOgD5WVSLnpXw4Nq8mVt6kf7WU1FLC6FUffKuz3mRWse1gGVg=="], - - "@chainsafe/libp2p-quic-linux-x64-gnu": ["@chainsafe/libp2p-quic-linux-x64-gnu@1.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-ZS4CtINANQeBvqVHAoWqW9SRfxZ9R5xbM1bQUPjjPsNWdIgu0vCjiIkRYqkaL9cJvVHJPguNhu/NwC6whkdWww=="], - - "@chainsafe/libp2p-quic-linux-x64-musl": ["@chainsafe/libp2p-quic-linux-x64-musl@1.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-LRi33YOHa/s/KSVRV4iCK+Cz8VBg2J8j3KrUEPtUp3aQvxYYvA/YkbRBcRNOyvEz6natzYA8LOycQsJTrVt4MA=="], - - "@chainsafe/libp2p-quic-win32-x64-msvc": ["@chainsafe/libp2p-quic-win32-x64-msvc@1.1.3", "", { "os": "win32", "cpu": "x64" }, "sha512-zm2h1lYkhHEcVrzO/D0NyPwf5yj0/4zWwltaHXl4fdQMy8kqJCm8zcyZmBRfniDX8/03a2svbYPZdTDtb7FSTw=="], - - "@chainsafe/libp2p-yamux": ["@chainsafe/libp2p-yamux@8.0.1", "", { "dependencies": { "@libp2p/interface": "^3.0.0", "@libp2p/utils": "^7.0.0", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8" } }, "sha512-pJsqmUg1cZRJZn/luAtQaq0uLcVfExo51Rg7iRtAEceNYtsKUi/exfegnvTBzTnF1CGmTzVEV3MCLsRhqiNyoA=="], - - "@chainsafe/netmask": ["@chainsafe/netmask@2.0.0", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1" } }, "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg=="], - - "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20240821.1", "", {}, "sha512-icAkbnAqgVl6ef9lgLTom8na+kj2RBw2ViPAQ586hbdj0xZcnrjK7P46Eu08OU9D/lNDgN2sKU/sxhe2iK/gIg=="], - - "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], - - "@databases/escape-identifier": ["@databases/escape-identifier@1.0.3", "", { "dependencies": { "@databases/validate-unicode": "^1.0.0" } }, "sha512-Su36iSVzaHxpVdISVMViUX/32sLvzxVgjZpYhzhotxZUuLo11GVWsiHwqkvUZijTLUxcDmUqEwGJO3O/soLuZA=="], - - "@databases/sql": ["@databases/sql@3.3.0", "", {}, "sha512-vj9huEy4mjJ48GS1Z8yvtMm4BYAnFYACUds25ym6Gd/gsnngkJ17fo62a6mmbNNwCBS/8467PmZR01Zs/06TjA=="], - - "@databases/validate-unicode": ["@databases/validate-unicode@1.0.0", "", {}, "sha512-dLKqxGcymeVwEb/6c44KjOnzaAafFf0Wxa8xcfEjx/qOl3rdijsKYBAtIGhtVtOlpPf/PFKfgTuFurSPn/3B/g=="], - - "@doctormckay/stats-reporter": ["@doctormckay/stats-reporter@1.0.5", "", {}, "sha512-lCAuKW053zz91sKZZcGfOHxigBqn0Lo+/JvHBQq3XqzLJxn0YeZ5mJ96+PZto+PDCkgg+c/BX2Xo8DvAN44xLg=="], - - "@doctormckay/stdlib": ["@doctormckay/stdlib@2.10.0", "", { "dependencies": { "psl": "^1.9.0" } }, "sha512-bwy+gPn6oa2KTpfxJKX3leZoV/wHDVtO0/gq3usPvqPswG//dcf3jVB8LcbRRsKO3BXCt5DqctOQ+Xb07ivxnw=="], - - "@doctormckay/user-agents": ["@doctormckay/user-agents@1.0.0", "", {}, "sha512-F+sL1YmebZTY2CnjoR9BXFEULpq7y8dxyLx48LZVa0BSDseXdLG/DtPISfM1iNv1XKCeiBzVNfAT/MOQ69v1Zw=="], - - "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.43.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^16.4.5", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.2", "which": "^4.0.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js", "git-dotenvx": "src/cli/dotenvx.js" } }, "sha512-Z8XjM75aWZ/ekUzBjlr/OqQsLWtJY4nVtruxopAt+FlYHfY0/gKl85nD16aEqbTkU53kJcm5psID0L2/sQMmuw=="], - - "@drdgvhbh/postgres-error-codes": ["@drdgvhbh/postgres-error-codes@0.0.6", "", {}, "sha512-tAz0Xp+qhq90x0r/3VW96iRdHFw72cYQqXa65u0eFVhSMC27bc2gZ8Ky5WXEmshrl/bCe7QTYBNEF0U5zeSQjw=="], - - "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], - - "@ecies/ciphers": ["@ecies/ciphers@0.2.3", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-tapn6XhOueMwht3E2UzY0ZZjYokdaw9XtL9kEyjhQ/Fb9vL9xTFbOaI+fV0AWvTpYu4BNloC6getKW6NtSg4mA=="], - - "@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], - - "@emotion/hash": ["@emotion/hash@0.9.2", "", {}, "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="], - - "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], - - "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], - - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.19.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.19.12", "", { "os": "android", "cpu": "arm" }, "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.19.12", "", { "os": "android", "cpu": "arm64" }, "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.19.12", "", { "os": "android", "cpu": "x64" }, "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.19.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.19.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.19.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.19.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.19.12", "", { "os": "linux", "cpu": "arm" }, "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.19.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.19.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.19.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.19.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.19.12", "", { "os": "linux", "cpu": "x64" }, "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg=="], - - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.19.12", "", { "os": "none", "cpu": "x64" }, "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA=="], - - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.19.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.19.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.19.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.19.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.19.12", "", { "os": "win32", "cpu": "x64" }, "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA=="], - - "@fastify/ajv-compiler": ["@fastify/ajv-compiler@4.0.2", "", { "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0" } }, "sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ=="], - - "@fastify/cors": ["@fastify/cors@10.1.0", "", { "dependencies": { "fastify-plugin": "^5.0.0", "mnemonist": "0.40.0" } }, "sha512-MZyBCBJtII60CU9Xme/iE4aEy8G7QpzGR8zkdXZkDFt7ElEMachbE61tfhAG/bvSaULlqlf0huMT12T7iqEmdQ=="], - - "@fastify/error": ["@fastify/error@4.0.0", "", {}, "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA=="], - - "@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@5.0.2", "", { "dependencies": { "fast-json-stringify": "^6.0.0" } }, "sha512-YdR7gqlLg1xZAQa+SX4sMNzQHY5pC54fu9oC5aYSUqBhyn6fkLkrdtKlpVdCNPlwuUuXA1PjFTEmvMF6ZVXVGw=="], - - "@fastify/forwarded": ["@fastify/forwarded@3.0.0", "", {}, "sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA=="], - - "@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.2.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A=="], - - "@fastify/proxy-addr": ["@fastify/proxy-addr@5.0.0", "", { "dependencies": { "@fastify/forwarded": "^3.0.0", "ipaddr.js": "^2.1.0" } }, "sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA=="], - - "@fastify/websocket": ["@fastify/websocket@11.0.2", "", { "dependencies": { "duplexify": "^4.1.3", "fastify-plugin": "^5.0.0", "ws": "^8.16.0" } }, "sha512-1oyJkNSZNJGjo/A5fXvlpEcm1kTBD91nRAN9lA7RNVsVNsyC5DuhOXdNL9/4UawVe7SKvzPT/QVI4RdtE9ylnA=="], - - "@fontsource-variable/geist-mono": ["@fontsource-variable/geist-mono@5.2.5", "", {}, "sha512-zyuyDtO00SbmqU4Bo5XWzX2hE5RUxL+h2bv3P8SrmxqfqW66FU/xw5DW3xRQPqQgyEpb/Fh5FEFCpOna78dvCA=="], - - "@fontsource-variable/mona-sans": ["@fontsource-variable/mona-sans@5.2.5", "", {}, "sha512-93IGwDK5M3Xp9ThPlk2PF8mMSWckzj90c3Tf9+veBuY7gWxrLjTMEMWm4CYqKaFCfnjAIYNU9X4CPCMsXwjLwQ=="], - - "@fontsource/geist-sans": ["@fontsource/geist-sans@5.2.5", "", {}, "sha512-anllOHyJbElRs9fV15TeDRqAeb1IKm4bSknPl6ZMoyPTx1BBy7logudcUwpNjmQLkzn4Q0JGQLRCUKJYoyST6A=="], - - "@gerrit0/mini-shiki": ["@gerrit0/mini-shiki@3.4.0", "", { "dependencies": { "@shikijs/engine-oniguruma": "^3.4.0", "@shikijs/langs": "^3.4.0", "@shikijs/themes": "^3.4.0", "@shikijs/types": "^3.4.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-48lKoQegmfJ0iyR/jRz5OrYOSM3WewG9YWCPqUvYFEC54shQO8RsAaspaK/2PRHVVnjekRqfAFvq8pwCpIo5ig=="], - - "@google-cloud/precise-date": ["@google-cloud/precise-date@4.0.0", "", {}, "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA=="], - - "@grpc/grpc-js": ["@grpc/grpc-js@1.12.6", "", { "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q=="], - - "@grpc/proto-loader": ["@grpc/proto-loader@0.7.13", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw=="], - - "@hono/arktype-validator": ["@hono/arktype-validator@2.0.0", "", { "peerDependencies": { "arktype": "^2.0.0-dev.14", "hono": "*" } }, "sha512-ICNZrK6Qcw6gyPfW53ONXI4JomRcks0fQhqzn9EWsfr6nlL6BNXQ96vIgVDU8qimcbJ2m3GJFAqgzOvWbZk3jw=="], - - "@hono/effect-validator": ["@hono/effect-validator@1.2.0", "", { "peerDependencies": { "effect": ">=3.10.0", "hono": ">=4.4.13" } }, "sha512-PJTTVsF3bN/ld7w3g3rcWRzhbgn2wG4CcAtZpgGAz90DF3TLD5ByVkkRI3SK0HnbtPQKT2Ndng+bJvLwV1lZZQ=="], - - "@hono/typebox-validator": ["@hono/typebox-validator@0.2.6", "", { "peerDependencies": { "@sinclair/typebox": ">=0.31.15 <1", "hono": ">=3.9.0" } }, "sha512-x+Q7RWiw6rJmJs7MDgtvRbS7ViXXEzqimC0duY4or7y1f89f5Z3KCQSdUSVka+Uv0HZ/O0ZNt+ixNDxfJLi4hA=="], - - "@hono/valibot-validator": ["@hono/valibot-validator@0.5.2", "", { "peerDependencies": { "hono": ">=3.9.0", "valibot": "^1.0.0 || ^1.0.0-beta.4 || ^1.0.0-rc" } }, "sha512-WbTr8PCFNAME0ale62rmmq+E8bGp5a7VPiVNmNT+Ue12GJE3Ax+CWBGtHhR0TzAEiloPvJND3IbjHIgtNtsqhw=="], - - "@hono/zod-validator": ["@hono/zod-validator@0.4.3", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.19.1" } }, "sha512-xIgMYXDyJ4Hj6ekm9T9Y27s080Nl9NXHcJkOvkXPhubOLj8hZkOL8pDnnXfvCf5xEE8Q4oMFenQUZZREUY2gqQ=="], - - "@httptoolkit/websocket-stream": ["@httptoolkit/websocket-stream@6.0.1", "", { "dependencies": { "@types/ws": "*", "duplexify": "^3.5.1", "inherits": "^2.0.1", "isomorphic-ws": "^4.0.1", "readable-stream": "^2.3.3", "safe-buffer": "^5.1.2", "ws": "*", "xtend": "^4.0.0" } }, "sha512-A0NOZI+Glp3Xgcz6Na7i7o09+/+xm2m0UCU8gdtM2nIv6/cjLmhMZMqehSpTlgbx9omtLmV8LVqOskPEyWnmZQ=="], - - "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.1.0" }, "os": "darwin", "cpu": "arm64" }, "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A=="], - - "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.1.0" }, "os": "darwin", "cpu": "x64" }, "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q=="], - - "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.1.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA=="], - - "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.1.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ=="], - - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.1.0", "", { "os": "linux", "cpu": "arm" }, "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA=="], - - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.1.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew=="], - - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.1.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ=="], - - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.1.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA=="], - - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.1.0", "", { "os": "linux", "cpu": "x64" }, "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q=="], - - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.1.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w=="], - - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.1.0", "", { "os": "linux", "cpu": "x64" }, "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A=="], - - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.1.0" }, "os": "linux", "cpu": "arm" }, "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA=="], - - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.1.0" }, "os": "linux", "cpu": "arm64" }, "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ=="], - - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.1.0" }, "os": "linux", "cpu": "s390x" }, "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA=="], - - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.1.0" }, "os": "linux", "cpu": "x64" }, "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA=="], - - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" }, "os": "linux", "cpu": "arm64" }, "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ=="], - - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.1", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.1.0" }, "os": "linux", "cpu": "x64" }, "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg=="], - - "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.1", "", { "dependencies": { "@emnapi/runtime": "^1.4.0" }, "cpu": "none" }, "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg=="], - - "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw=="], - - "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.1", "", { "os": "win32", "cpu": "x64" }, "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw=="], - - "@ioredis/commands": ["@ioredis/commands@1.2.0", "", {}, "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="], - - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], - - "@isaacs/string-locale-compare": ["@isaacs/string-locale-compare@1.1.0", "", {}, "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ=="], - - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], - - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - - "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], - - "@jridgewell/source-map": ["@jridgewell/source-map@0.3.6", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], - - "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], - - "@jsdevtools/ono": ["@jsdevtools/ono@7.1.3", "", {}, "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="], - - "@leichtgewicht/ip-codec": ["@leichtgewicht/ip-codec@2.0.5", "", {}, "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="], - - "@libp2p/crypto": ["@libp2p/crypto@5.1.10", "", { "dependencies": { "@libp2p/interface": "^3.0.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-kfQwQUV4iLV9tE7C6IjUd61XWEIrg4WBqGIDjeMoUhRPDGQ3z+eIIuIEaBRDEXr8nWd0YZuCprN1AunajHmbfg=="], - - "@libp2p/identify": ["@libp2p/identify@4.0.5", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/interface-internal": "^3.0.5", "@libp2p/peer-id": "^6.0.3", "@libp2p/peer-record": "^9.0.3", "@libp2p/utils": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "it-drain": "^3.0.10", "it-parallel": "^3.0.13", "main-event": "^1.0.1", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-p25fw5+w0OjsAgxJWWZhUY25hYGyfFlA1ifycE6DFnPuhYHosZx69/2Q30rq4kZgSEBCepGcj32cKRhWCn0L9A=="], - - "@libp2p/interface": ["@libp2p/interface@3.0.2", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-nb3H0eu9RPCBjwWUCafSL3TpFmt1Jhe4zgWlV98VrrWhtxg8xaunbEWzfVnU+R2TvV8IAljGw80OcqSst3gBlw=="], - - "@libp2p/interface-internal": ["@libp2p/interface-internal@3.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/peer-collections": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "progress-events": "^1.0.1" } }, "sha512-gaarewSLKpH5iMkXPmUctDk8SoBf/fXL/wNkpfHqHXtzP6Z4Hhm6eFc/DpL8NfCe+tLf1Cdmg3jOsxfdBS3IoA=="], - - "@libp2p/logger": ["@libp2p/logger@6.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "multiformats": "^13.4.0", "weald": "^1.0.6" } }, "sha512-4HdUwusPh57KKSY0v0YMYw6T2wl93svOLFNJuosy2xLto9zty1KWkrjaEFyF6jF0a7zBd1k5trjJsDXo8OKDxw=="], - - "@libp2p/multistream-select": ["@libp2p/multistream-select@7.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/utils": "^7.0.5", "it-length-prefixed": "^10.0.1", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-OXAv32VtxGYk88VX4jmUgD6Xo58xGgm1oKTNC1ieJ7PbNITfyr/LqOnruuw+/JwQ2LsE806ddOMM8aMV24RMIg=="], - - "@libp2p/peer-collections": ["@libp2p/peer-collections@7.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/peer-id": "^6.0.3", "@libp2p/utils": "^7.0.5", "multiformats": "^13.4.0" } }, "sha512-mUkVDAHyxGr8fAI+aa+kf6izP4BI3qqIvuMQQpppYRG3feptmiRqSulbt/UpXoIepLp/1hIlAeZ+QyAMBZ7EpA=="], - - "@libp2p/peer-id": ["@libp2p/peer-id@6.0.3", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-kNecI7YYeh55Jrx+ra0AxEx5CfpKB4/i+4rBJ8jRyLaMgJvwhTC055mZrKv+rUWEEfp/9VqCnDKQ8cVoDbDydA=="], - - "@libp2p/peer-record": ["@libp2p/peer-record@9.0.3", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/peer-id": "^6.0.3", "@multiformats/multiaddr": "^13.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-W1K/fdyLDZpxEEcS08JafyNyDUAKHhdjxdt2M7ZwDtBbRrM9RFseZaGHufpMEgPZxne6RriLpJp1NLeFPF9bZA=="], - - "@libp2p/peer-store": ["@libp2p/peer-store@12.0.5", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/peer-collections": "^7.0.5", "@libp2p/peer-id": "^6.0.3", "@libp2p/peer-record": "^9.0.3", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "it-all": "^3.0.9", "main-event": "^1.0.1", "mortice": "^3.3.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-hRv3SQZTpB6XFl+suyl0aD2OiLYQIA+UZ4SvCuXCYfIQd8TCSSUbcj1dICrK8aorDVus3ycyMqHAMmbts/5ndA=="], - - "@libp2p/ping": ["@libp2p/ping@3.0.5", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/interface-internal": "^3.0.5", "@multiformats/multiaddr": "^13.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-/1WPyBtKg8yzM2iZ+XylH88S6Z964dggiFgBLtnAEU4kqF1gGFWI/GHOVXltSWKUulnooxpEBf7F8x1jn80MVQ=="], - - "@libp2p/utils": ["@libp2p/utils@7.0.5", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/logger": "^6.0.5", "@multiformats/multiaddr": "^13.0.1", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "cborg": "^4.2.14", "delay": "^6.0.0", "is-loopback-addr": "^2.0.2", "it-length-prefixed": "^10.0.1", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-SmefnIdRXjLh9SdJ8nIL0LFvBqVuti3kujzk0/4Xj8mvAEzYl7h/Ge5VU6PHpzat9CZMplGQGGfr/vxX1WuckQ=="], - - "@libp2p/websockets": ["@libp2p/websockets@10.0.6", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/utils": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "@multiformats/multiaddr-to-uri": "^12.0.0", "main-event": "^1.0.1", "p-event": "^7.0.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0", "ws": "^8.18.3" } }, "sha512-rHsV3IR9fTsKUV/dexzmA1CIsIzkqgc5npwgUepXdrejTHhCZfmDSo52fdEsN4kfoWlOK4RmDxXrgQxxkrQeSw=="], - - "@libp2p/webtransport": ["@libp2p/webtransport@6.0.7", "", { "dependencies": { "@chainsafe/libp2p-noise": "^17.0.0", "@libp2p/interface": "^3.0.2", "@libp2p/peer-id": "^6.0.3", "@libp2p/utils": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "multiformats": "^13.3.6", "progress-events": "^1.0.1", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-N9w2RXygo93Bg1PaQJTsjPmx+itMhUXhvJrRvBWqvzDoNbjCEZ8ofJKjPGzWr0eNIXsF57rHrCHF1devBDjE4g=="], - - "@logdna/tail-file": ["@logdna/tail-file@2.2.0", "", {}, "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng=="], - - "@macaron-css/babel": ["@macaron-css/babel@1.5.1", "", { "dependencies": { "@babel/core": "^7.18.2", "@babel/generator": "^7.18.2", "@babel/helper-module-imports": "^7.16.7", "@babel/preset-typescript": "^7.22.5", "@emotion/hash": "^0.8.0", "@types/babel__core": "^7.1.19" } }, "sha512-gN/ju/21avvQBeT3gGX/nLnWRrIcOIYcleKKZRi1hWK1b1lxJy7uMdNMFLf/4QpvlOTsqzu53I5seGatb445qg=="], - - "@macaron-css/core": ["@macaron-css/core@1.5.1", "", { "dependencies": { "@vanilla-extract/css": "^1.7.1", "@vanilla-extract/dynamic": "^2.0.3", "@vanilla-extract/recipes": "^0.2.5" } }, "sha512-mEZ5ZENNgjDUWomzy3pkUcHqP0c66zrkqfjoHlzjkyukN/H7kbCe5+ygzPBeGm4UnZJOBRU0MDYdQR7yViyWxA=="], - - "@macaron-css/integration": ["@macaron-css/integration@1.5.1", "", { "dependencies": { "@babel/core": "^7.18.2", "@babel/plugin-syntax-jsx": "^7.17.12", "@macaron-css/babel": "1.5.1", "@vanilla-extract/integration": "^6.0.0", "esbuild": "^0.14.42" } }, "sha512-7qUKOFfiLge+zJDWreU5JouwVUaxe9AiIRHzN32/NxOBiZDEkEvzVtix0+wDZhnv4//+zLbSux5btTc2j662RA=="], - - "@macaron-css/solid": ["@macaron-css/solid@1.5.3", "", { "dependencies": { "@macaron-css/core": "1.5.2" }, "peerDependencies": { "@vanilla-extract/recipes": "^0.2.5", "solid-js": "^1.4.3" } }, "sha512-GzPiSxhbegxPKujkQW7FCPegd8Qh4t9E/WCz0xMtRzH1t2YtgWdbSN9cHZx/gEyQ8fKKWb+543v8utlimz419w=="], - - "@macaron-css/vite": ["@macaron-css/vite@1.5.1", "", { "dependencies": { "@macaron-css/integration": "1.5.1", "@vanilla-extract/integration": "^6.0.0", "@vanilla-extract/vite-plugin": "^3.1.6" } }, "sha512-pGjV+0jfzVf2ow3jPTj2XNJ2m5KGx4mbCiLB9OMS3QuJXtgq6cTeg50GZONyo/NetBmwEYKi6AU87IQjZb0miA=="], - - "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.6.1", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^4.1.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA=="], - - "@modular-forms/solid": ["@modular-forms/solid@0.25.1", "", { "dependencies": { "valibot": "^1.0.0-beta.6" }, "peerDependencies": { "solid-js": "^1.3.1" } }, "sha512-issNZ3xl4tj+1K7KT4dNTQaRq5SmVUXgUPeGTMjtrAzCeTnwM/u6vUxSuTY2bcMw4GzTxreFXLx1xMMhrFkt0A=="], - - "@multiformats/dns": ["@multiformats/dns@1.0.6", "", { "dependencies": { "@types/dns-packet": "^5.6.5", "buffer": "^6.0.3", "dns-packet": "^5.6.1", "hashlru": "^2.3.0", "p-queue": "^8.0.1", "progress-events": "^1.0.0", "uint8arrays": "^5.0.2" } }, "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw=="], - - "@multiformats/multiaddr": ["@multiformats/multiaddr@13.0.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g=="], - - "@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@2.0.2", "", { "dependencies": { "@multiformats/multiaddr": "^12.0.0" } }, "sha512-si7EZCI93mfBJKKRkh+u2bB9W6W5APVN3XfdwuseEJ0OS7ysg0Jno9SuAi0bRzsl5OEFESoF71SjsRqgp8PXAA=="], - - "@multiformats/multiaddr-to-uri": ["@multiformats/multiaddr-to-uri@12.0.0", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-3uIEBCiy8tfzxYYBl81x1tISiNBQ7mHU4pGjippbJRoQYHzy/ZdZM/7JvTldr8pc/dzpkaNJxnsuxxlhsPOJsA=="], - - "@neondatabase/serverless": ["@neondatabase/serverless@1.0.1", "", { "dependencies": { "@types/node": "^22.15.30", "@types/pg": "^8.8.0" } }, "sha512-O6yC5TT0jbw86VZVkmnzCZJB0hfxBl0JJz6f+3KHoZabjb/X08r9eFA+vuY06z1/qaovykvdkrXYq3SPUuvogA=="], - - "@nestri/core": ["@nestri/core@workspace:cloud/packages/core"], - - "@nestri/functions": ["@nestri/functions@workspace:cloud/packages/functions"], - - "@nestri/input": ["@nestri/input@workspace:packages/input"], - - "@nestri/libmoq": ["@nestri/libmoq@workspace:packages/moq"], - - "@nestri/maitred": ["@nestri/maitred@workspace:cloud/packages/maitred"], - - "@nestri/www": ["@nestri/www@workspace:packages/www"], - - "@nestri/zero": ["@nestri/zero@workspace:packages/zero"], - - "@noble/ciphers": ["@noble/ciphers@2.0.1", "", {}, "sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g=="], - - "@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="], - - "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], - - "@npmcli/agent": ["@npmcli/agent@2.2.2", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og=="], - - "@npmcli/arborist": ["@npmcli/arborist@7.5.4", "", { "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^3.1.1", "@npmcli/installed-package-contents": "^2.1.0", "@npmcli/map-workspaces": "^3.0.2", "@npmcli/metavuln-calculator": "^7.1.1", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.1.0", "@npmcli/query": "^3.1.0", "@npmcli/redact": "^2.0.0", "@npmcli/run-script": "^8.1.0", "bin-links": "^4.0.4", "cacache": "^18.0.3", "common-ancestor-path": "^1.0.1", "hosted-git-info": "^7.0.2", "json-parse-even-better-errors": "^3.0.2", "json-stringify-nice": "^1.1.4", "lru-cache": "^10.2.2", "minimatch": "^9.0.4", "nopt": "^7.2.1", "npm-install-checks": "^6.2.0", "npm-package-arg": "^11.0.2", "npm-pick-manifest": "^9.0.1", "npm-registry-fetch": "^17.0.1", "pacote": "^18.0.6", "parse-conflict-json": "^3.0.0", "proc-log": "^4.2.0", "proggy": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "ssri": "^10.0.6", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" }, "bin": { "arborist": "bin/index.js" } }, "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g=="], - - "@npmcli/fs": ["@npmcli/fs@3.1.1", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg=="], - - "@npmcli/git": ["@npmcli/git@5.0.8", "", { "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^4.0.0" } }, "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ=="], - - "@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@2.1.0", "", { "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w=="], - - "@npmcli/map-workspaces": ["@npmcli/map-workspaces@3.0.6", "", { "dependencies": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", "minimatch": "^9.0.0", "read-package-json-fast": "^3.0.0" } }, "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA=="], - - "@npmcli/metavuln-calculator": ["@npmcli/metavuln-calculator@7.1.1", "", { "dependencies": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", "pacote": "^18.0.0", "proc-log": "^4.1.0", "semver": "^7.3.5" } }, "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g=="], - - "@npmcli/name-from-folder": ["@npmcli/name-from-folder@2.0.0", "", {}, "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg=="], - - "@npmcli/node-gyp": ["@npmcli/node-gyp@3.0.0", "", {}, "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA=="], - - "@npmcli/package-json": ["@npmcli/package-json@5.2.1", "", { "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", "proc-log": "^4.0.0", "semver": "^7.5.3" } }, "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ=="], - - "@npmcli/promise-spawn": ["@npmcli/promise-spawn@7.0.2", "", { "dependencies": { "which": "^4.0.0" } }, "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ=="], - - "@npmcli/query": ["@npmcli/query@3.1.0", "", { "dependencies": { "postcss-selector-parser": "^6.0.10" } }, "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ=="], - - "@npmcli/redact": ["@npmcli/redact@2.0.1", "", {}, "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw=="], - - "@npmcli/run-script": ["@npmcli/run-script@8.1.0", "", { "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", "proc-log": "^4.0.0", "which": "^4.0.0" } }, "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg=="], - - "@openauthjs/openauth": ["@openauthjs/openauth@0.4.3", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-RlnjqvHzqcbFVymEwhlUEuac4utA5h4nhSK/i2szZuQmxTIqbGUxZ+nM+avM+VV4Ing+/ZaNLKILoXS3yrkOOw=="], - - "@openauthjs/openevent": ["@openauthjs/openevent@0.0.27", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6", "ulid": "2.3.0" }, "peerDependencies": { "drizzle-orm": "^0.x", "mysql2": "^3.x", "postgres": "^3.x" }, "optionalPeers": ["drizzle-orm", "mysql2", "postgres"] }, "sha512-Peyl8hWGPmwTPC9gp3ufjEQ55mu64sSa9suBdW7SfHFBMnvxwD+XIoErneXyAH/ydomRghlh6t4N9mCCHjaF4g=="], - - "@openauthjs/solid": ["@openauthjs/solid@0.0.0-20250311201457", "", { "dependencies": { "@openauthjs/openauth": "0.4.2", "@solid-primitives/storage": "^4.3.1" }, "peerDependencies": { "solid-js": "^1.8.0" } }, "sha512-LEkW4FuAOjlME9m16WDlGOttrGSh1iiY2dmoGfST+vU41sbmFezlOhfl8Z2Iq82OYP67jCZprEHuD/zNMzNblA=="], - - "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - - "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.200.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q=="], - - "@opentelemetry/auto-instrumentations-node": ["@opentelemetry/auto-instrumentations-node@0.58.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/instrumentation-amqplib": "^0.47.0", "@opentelemetry/instrumentation-aws-lambda": "^0.51.1", "@opentelemetry/instrumentation-aws-sdk": "^0.52.0", "@opentelemetry/instrumentation-bunyan": "^0.46.0", "@opentelemetry/instrumentation-cassandra-driver": "^0.46.0", "@opentelemetry/instrumentation-connect": "^0.44.0", "@opentelemetry/instrumentation-cucumber": "^0.15.0", "@opentelemetry/instrumentation-dataloader": "^0.17.0", "@opentelemetry/instrumentation-dns": "^0.44.0", "@opentelemetry/instrumentation-express": "^0.49.0", "@opentelemetry/instrumentation-fastify": "^0.45.0", "@opentelemetry/instrumentation-fs": "^0.20.0", "@opentelemetry/instrumentation-generic-pool": "^0.44.0", "@opentelemetry/instrumentation-graphql": "^0.48.0", "@opentelemetry/instrumentation-grpc": "^0.200.0", "@opentelemetry/instrumentation-hapi": "^0.46.0", "@opentelemetry/instrumentation-http": "^0.200.0", "@opentelemetry/instrumentation-ioredis": "^0.48.0", "@opentelemetry/instrumentation-kafkajs": "^0.9.2", "@opentelemetry/instrumentation-knex": "^0.45.0", "@opentelemetry/instrumentation-koa": "^0.48.0", "@opentelemetry/instrumentation-lru-memoizer": "^0.45.0", "@opentelemetry/instrumentation-memcached": "^0.44.0", "@opentelemetry/instrumentation-mongodb": "^0.53.0", "@opentelemetry/instrumentation-mongoose": "^0.47.1", "@opentelemetry/instrumentation-mysql": "^0.46.0", "@opentelemetry/instrumentation-mysql2": "^0.46.0", "@opentelemetry/instrumentation-nestjs-core": "^0.46.0", "@opentelemetry/instrumentation-net": "^0.44.0", "@opentelemetry/instrumentation-pg": "^0.52.0", "@opentelemetry/instrumentation-pino": "^0.47.0", "@opentelemetry/instrumentation-redis": "^0.47.0", "@opentelemetry/instrumentation-redis-4": "^0.47.0", "@opentelemetry/instrumentation-restify": "^0.46.0", "@opentelemetry/instrumentation-router": "^0.45.0", "@opentelemetry/instrumentation-runtime-node": "^0.14.0", "@opentelemetry/instrumentation-socket.io": "^0.47.0", "@opentelemetry/instrumentation-tedious": "^0.19.0", "@opentelemetry/instrumentation-undici": "^0.11.0", "@opentelemetry/instrumentation-winston": "^0.45.0", "@opentelemetry/resource-detector-alibaba-cloud": "^0.31.0", "@opentelemetry/resource-detector-aws": "^2.0.0", "@opentelemetry/resource-detector-azure": "^0.7.0", "@opentelemetry/resource-detector-container": "^0.7.0", "@opentelemetry/resource-detector-gcp": "^0.34.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-node": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.4.1", "@opentelemetry/core": "^2.0.0" } }, "sha512-hAsNw5XtFTytQ6GrCspIwKKSamXQGfAvRfqOL93VTqaI1WFBhndyXsNrjAzqULvK0JwMJOuZb77ckdrvJrW3vA=="], - - "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="], - - "@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - - "@opentelemetry/exporter-logs-otlp-grpc": ["@opentelemetry/exporter-logs-otlp-grpc@0.200.0", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-grpc-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/sdk-logs": "0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-+3MDfa5YQPGM3WXxW9kqGD85Q7s9wlEMVNhXXG7tYFLnIeaseUt9YtCeFhEDFzfEktacdFpOtXmJuNW8cHbU5A=="], - - "@opentelemetry/exporter-logs-otlp-http": ["@opentelemetry/exporter-logs-otlp-http@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/sdk-logs": "0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-KfWw49htbGGp9s8N4KI8EQ9XuqKJ0VG+yVYVYFiCYSjEV32qpQ5qZ9UZBzOZ6xRb+E16SXOSCT3RkqBVSABZ+g=="], - - "@opentelemetry/exporter-logs-otlp-proto": ["@opentelemetry/exporter-logs-otlp-proto@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-logs": "0.200.0", "@opentelemetry/sdk-trace-base": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GmahpUU/55hxfH4TP77ChOfftADsCq/nuri73I/AVLe2s4NIglvTsaACkFVZAVmnXXyPS00Fk3x27WS3yO07zA=="], - - "@opentelemetry/exporter-metrics-otlp-grpc": ["@opentelemetry/exporter-metrics-otlp-grpc@0.200.0", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.0.0", "@opentelemetry/exporter-metrics-otlp-http": "0.200.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-grpc-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-metrics": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uHawPRvKIrhqH09GloTuYeq2BjyieYHIpiklOvxm9zhrCL2eRsnI/6g9v2BZTVtGp8tEgIa7rCQ6Ltxw6NBgew=="], - - "@opentelemetry/exporter-metrics-otlp-http": ["@opentelemetry/exporter-metrics-otlp-http@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-metrics": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5BiR6i8yHc9+qW7F6LqkuUnIzVNA7lt0qRxIKcKT+gq3eGUPHZ3DY29sfxI3tkvnwMgtnHDMNze5DdxW39HsAw=="], - - "@opentelemetry/exporter-metrics-otlp-proto": ["@opentelemetry/exporter-metrics-otlp-proto@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/exporter-metrics-otlp-http": "0.200.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-metrics": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-E+uPj0yyvz81U9pvLZp3oHtFrEzNSqKGVkIViTQY1rH3TOobeJPSpLnTVXACnCwkPR5XeTvPnK3pZ2Kni8AFMg=="], - - "@opentelemetry/exporter-prometheus": ["@opentelemetry/exporter-prometheus@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-metrics": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ZYdlU9r0USuuYppiDyU2VFRA0kFl855ylnb3N/2aOlXrbA4PMCznen7gmPbetGQu7pz8Jbaf4fwvrDnVdQQXSw=="], - - "@opentelemetry/exporter-trace-otlp-grpc": ["@opentelemetry/exporter-trace-otlp-grpc@0.200.0", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-grpc-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-hmeZrUkFl1YMsgukSuHCFPYeF9df0hHoKeHUthRKFCxiURs+GwF1VuabuHmBMZnjTbsuvNjOB+JSs37Csem/5Q=="], - - "@opentelemetry/exporter-trace-otlp-http": ["@opentelemetry/exporter-trace-otlp-http@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Goi//m/7ZHeUedxTGVmEzH19NgqJY+Bzr6zXo1Rni1+hwqaksEyJ44gdlEMREu6dzX1DlAaH/qSykSVzdrdafA=="], - - "@opentelemetry/exporter-trace-otlp-proto": ["@opentelemetry/exporter-trace-otlp-proto@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-V9TDSD3PjK1OREw2iT9TUTzNYEVWJk4Nhodzhp9eiz4onDMYmPy3LaGbPv81yIR6dUb/hNp/SIhpiCHwFUq2Vg=="], - - "@opentelemetry/exporter-zipkin": ["@opentelemetry/exporter-zipkin@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA=="], - - "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.55.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.55.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ=="], - - "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.47.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-bQboBxolOVDcD4l5QAwqKYpJVKQ8BW82+8tiD5uheu0hDuYgdmDziSAByc8yKS7xpkJw4AYocVP7JwSpQ1hgjg=="], - - "@opentelemetry/instrumentation-aws-lambda": ["@opentelemetry/instrumentation-aws-lambda@0.51.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/aws-lambda": "8.10.147" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DxUihz1ZcJtkCKFMnsr5IpQtU1TFnz/QhTEkcb95yfVvmdWx97ezbcxE4lGFjvQYMT8q2NsZjor8s8W/jrMU2w=="], - - "@opentelemetry/instrumentation-aws-sdk": ["@opentelemetry/instrumentation-aws-sdk@0.52.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/propagation-utils": "^0.31.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-xMnghwQP/vO9hNNufaHW3SgNprifLPqmssAQ/zjRopbxa6wpBqunWfKYRRoyu89Xlw0X8/hGNoPEh+CIocCryg=="], - - "@opentelemetry/instrumentation-bunyan": ["@opentelemetry/instrumentation-bunyan@0.46.0", "", { "dependencies": { "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/instrumentation": "^0.200.0", "@types/bunyan": "1.8.11" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-7ERXBAMIVi1rtFG5odsLTLVy6IJZnLLB74fFlPstV7/ZZG04UZ8YFOYVS14jXArcPohY8HFYLbm56dIFCXYI9w=="], - - "@opentelemetry/instrumentation-cassandra-driver": ["@opentelemetry/instrumentation-cassandra-driver@0.46.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ItT2C32afignjHQosleI/iBjzlHhF+F7tJIK9ty47/CceVNlA9oK39ss9f7o9jmnKvQfhNWffvkXdjc0afwnSQ=="], - - "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.44.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-eChFPViU/nkHsCYSp2PCnHnxt/ZmI/N5reHcwmjXbKhEj6TRNJcjLpI+OQksP8lLu0CS9DlDosHEhknCsxLdjQ=="], - - "@opentelemetry/instrumentation-cucumber": ["@opentelemetry/instrumentation-cucumber@0.15.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-MOHDzttn5TSBqt4j3/XjBhYNH0iLQP7oX2pumIzXP7dJFTcUtaq6PVakKPtIaqBTTabOKqCJhrF240XGwWefPQ=="], - - "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.17.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-JqovxOo7a65+3A/W+eiqUv7DrDsSvsY0NemHJ4uyVrzD4bpDYofVRdnz/ehYcNerlxVIKU+HcybDmiaoj41DPw=="], - - "@opentelemetry/instrumentation-dns": ["@opentelemetry/instrumentation-dns@0.44.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-+tAFXkFPldOpIba2akqKQ1ukqHET1pZ4pqhrr5x0p+RJ+1a1pPmTt1vCyvSSr634WOY8qMSmzZps++16yxnMbA=="], - - "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.49.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-j1hbIZzbu7jLQfI/Hz0wHDaniiSWdC3B8/UdH0CEd4lcO8y0pQlz4UTReBaL1BzbkwUhbg6oHuK+m8DXklQPtA=="], - - "@opentelemetry/instrumentation-fastify": ["@opentelemetry/instrumentation-fastify@0.45.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-m94anTFZ6jpvK0G5fXIiq1sB0gCgY2rAL7Cg7svuOh9Roya2RIQz2E5KfCsO1kWCmnHNeTo7wIofoGN7WLPvsA=="], - - "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.20.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-30l45ovjwHb16ImCGVjKCvw5U7X1zKuYY26ii5S+goV8BZ4a/TCpBf2kQxteQjWD05Gl3fzPMZI5aScfPI6Rjw=="], - - "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.44.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-bY7locZDqmQLEtY2fIJbSnAbHilxfhflaEQHjevFGkaiXc9UMtOvITOy5JKHhYQISpgrvY2WGXKG7YlVyI7uMg=="], - - "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.48.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-w1sbf9F9bQTpIWGnKWhH1A+9N9rKxS4eM+AzczgMWp272ZM9lQv4zLTrH5NRST2ltY3nmZ72wkfFrSR0rECi0g=="], - - "@opentelemetry/instrumentation-grpc": ["@opentelemetry/instrumentation-grpc@0.55.0", "", { "dependencies": { "@opentelemetry/instrumentation": "0.55.0", "@opentelemetry/semantic-conventions": "1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-n2ZH4pRwOy0Vhag/3eKqiyDBwcpUnGgJI9iiIRX7vivE0FMncaLazWphNFezRRaM/LuKwq1TD8pVUvieP68mow=="], - - "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.46.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-573y+ZxywEcq+3+Z3KqcbV45lrVwUKvQiP9OhABVFNX8wHbtM6DPRBmYfqiUkSbIBcOEihm5qH6Gs73Xq0RBEA=="], - - "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/instrumentation": "0.200.0", "@opentelemetry/semantic-conventions": "^1.29.0", "forwarded-parse": "2.1.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-9tqGbCJikhYU68y3k9mi6yWsMyMeCcwoQuHvIXan5VvvPPQ5WIZaV6Mxu/MCVe4swRNoFs8Th+qyj0TZV5ELvw=="], - - "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.48.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/redis-common": "^0.37.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-kQhdrn/CAfJIObqbyyGtagWNxPvglJ9FwnWmsfXKodaGskJv/nyvdC9yIcgwzjbkG1pokVUROrvJ0mizqm29Tg=="], - - "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.9.2", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-aRnrLK3gQv6LP64oiXEDdRVwxNe7AvS98SCtNWEGhHy4nv3CdxpN7b7NU53g3PCF7uPQZ1fVW2C6Xc2tt1SIkg=="], - - "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.45.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-2kkyTDUzK/3G3jxTc+NqHSdgi1Mjw2irZ98T/cSyNdlbsnDOMSTHjbm0AxJCV4QYQ4cKW7a8W/BBgxDGlu+mXQ=="], - - "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.48.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-LV63v3pxFpjKC0IJO+y5nsGdcH+9Y8Wnn0fhu673XZ5auxqJk2t4nIHuSmls08oRKaX+5q1e+h70XmP/45NJsw=="], - - "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.45.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-W2MNx7hPtvSIgEFxFrqdBykdfN0UrShCbJxvMU9fwgqbOdxIrcubPt0i1vmy3Ap6QwSi+HmsRNQD2w3ucbLG3A=="], - - "@opentelemetry/instrumentation-memcached": ["@opentelemetry/instrumentation-memcached@0.44.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/memcached": "^2.2.6" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-1zABdJlF9Tk0yUv2ELpF6Mk2kw81k+bnB3Sw+D/ssRDcGGCnCNbz+fKJE8dwAPkDP+OcTmiKm6ySREbcyRFzCg=="], - - "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.53.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zS2gQJQuG7RZw5yaNG/TnxsOtv1fFkn3ypuDrVLJtJLZtcOr4GYn31jbIA8od+QW/ChZLVcH364iDs+z/xS9wA=="], - - "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.47.1", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-0OcL5YpZX9PtF55Oi1RtWUdjElJscR9u6NzAdww81EQc3wFfQWmdREUEBeWaDH5jpiomdFp6zDXms622ofEOjg=="], - - "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.46.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/mysql": "2.15.26" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Z1NDAv07suIukgL7kxk9cAQX1t/smRMLNOU+q5Aqnhnf/0FIF/N4cX2wg+25IWy0m2PoaPbAVYCKB0aOt5vzAw=="], - - "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.46.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.41.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-JsmIA+aTfHqy2tahjnVWChRipYpYrTy+XFAuUPia9CTaspCx8ZrirPUqYnbnaPEtnzYff2a4LX0B2LT1hKlOiA=="], - - "@opentelemetry/instrumentation-nestjs-core": ["@opentelemetry/instrumentation-nestjs-core@0.46.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5cYnBIMZuTSLFUt0pMH+NQNdI5/2YeCVuz29Mo2lkudbBUOvzGmzl/Y6LG1JEw2j6zuJx5IgO5CKNrJqAIzTWA=="], - - "@opentelemetry/instrumentation-net": ["@opentelemetry/instrumentation-net@0.44.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-SmAbOKTi0lgdTN9XMXOaf+4jw670MpiK3pw9/to/kRlTvNWwWA4RD34trCcoL7Gf2IYoXuj56Oo4Z5C7N98ukw=="], - - "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.52.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.41.0", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.6" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OBpqlxTqmFkZGHaHV4Pzd95HkyKVS+vf0N5wVX3BSb8uqsvOrW62I1qt+2jNsZ13dtG5eOzvcsQTMGND76wizA=="], - - "@opentelemetry/instrumentation-pino": ["@opentelemetry/instrumentation-pino@0.47.0", "", { "dependencies": { "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OFOy/TGtGXMYWrF4xPKhLN1evdqUpbuoKODzeh3GSjFkcooZZf4m/Hpzu12FV+s0wDBf43oAjXbNJWeCJQMrug=="], - - "@opentelemetry/instrumentation-redis": ["@opentelemetry/instrumentation-redis@0.47.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/redis-common": "^0.37.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-T2YvuX/LaJEQKgKvIQJlbSMSzxp6oBm+9PMgfn7QcBXzSY9tyeyDF6QjLAKNvxs+BJeQzFmDlahjoEyatzxRWA=="], - - "@opentelemetry/instrumentation-redis-4": ["@opentelemetry/instrumentation-redis-4@0.47.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/redis-common": "^0.37.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-9LywJGp1fmmLj6g1+Rv91pVE3ATle1C/qIya9ZLwPywXTOdFIARI/gvvvlI7uFABoLojj2dSaI/5JQrq4C1HSg=="], - - "@opentelemetry/instrumentation-restify": ["@opentelemetry/instrumentation-restify@0.46.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-du1FjKsTGQH6q8QjG0Bxlg0L79Co/Ey0btKKb2sg7fvg0YX6LKdR2N1fzfne/A9k+WjQ5v28JuUXOk2cEPYU/Q=="], - - "@opentelemetry/instrumentation-router": ["@opentelemetry/instrumentation-router@0.45.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CGEeT73Wy/nLQw+obG/mBCIgMbZQKrGG6hzbEdtQ4G2jqI97w7pLWdM4DvkpWVBNcxMpO13dX1nn2OiyZXND3Q=="], - - "@opentelemetry/instrumentation-runtime-node": ["@opentelemetry/instrumentation-runtime-node@0.14.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-y78dGoFMKwHSz0SD113Gt1dFTcfunpPZXIJh2SzJN27Lyb9FIzuMfjc3Iu3+s/N6qNOLuS9mKnPe3/qVGG4Waw=="], - - "@opentelemetry/instrumentation-socket.io": ["@opentelemetry/instrumentation-socket.io@0.47.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-qAc+XCcRmZYjs8KJIPv+MMR2wPPPOppwoarzKRR4G+yvOBs1xMwbbkqNHifKga0XcfFX4KVr7Z5QQ6ZZzWyLtg=="], - - "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.19.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-hNC/Bz+g4RvwaKsbA1VD+9x8X2Ml+fN2uba4dniIdQIrAItLdet4xx/7TEoWYtyVJQozphvpnIsUp52Rw4djCA=="], - - "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.11.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-H6ijJnKVZBB0Lhm6NsaBt0rUz+i52LriLhrpGAE8SazB0jCIVY4MrL2dNib/4w8zA+Fw9zFwERJvKXUIbSD1ew=="], - - "@opentelemetry/instrumentation-winston": ["@opentelemetry/instrumentation-winston@0.45.0", "", { "dependencies": { "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/instrumentation": "^0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-LZz3/6QvzoneSqD/xnB8wq/g1fy8oe2PwfZ15zS2YA5mnjuSqlqgl+k3sib7wfIYHMP1D3ajfbDB6UOJBALj/w=="], - - "@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.200.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-transformer": "0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IxJgA3FD7q4V6gGq4bnmQM5nTIyMDkoGFGrBrrDjB6onEiq1pafma55V+bHvGYLWvcqbBbRfezr1GED88lacEQ=="], - - "@opentelemetry/otlp-grpc-exporter-base": ["@opentelemetry/otlp-grpc-exporter-base@0.200.0", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", "@opentelemetry/otlp-transformer": "0.200.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CK2S+bFgOZ66Bsu5hlDeOX6cvW5FVtVjFFbWuaJP0ELxJKBB6HlbLZQ2phqz/uLj1cWap5xJr/PsR3iGoB7Vqw=="], - - "@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-logs": "0.200.0", "@opentelemetry/sdk-metrics": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-+9YDZbYybOnv7sWzebWOeK6gKyt2XE7iarSyBFkwwnP559pEevKOUD8NyDHhRjCSp13ybh9iVXlMfcj/DwF/yw=="], - - "@opentelemetry/propagation-utils": ["@opentelemetry/propagation-utils@0.31.1", "", { "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-YLNt7SWy4HZwI9d+4+OevQs2Gmof27TkjR3v029UGw8zFOcyONyIQhHHx7doyRbrLpWZtUc91cnCA4mKhArCXw=="], - - "@opentelemetry/propagator-b3": ["@opentelemetry/propagator-b3@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ=="], - - "@opentelemetry/propagator-jaeger": ["@opentelemetry/propagator-jaeger@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg=="], - - "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.37.0", "", {}, "sha512-tJwgE6jt32bLs/9J6jhQRKU2EZnsD8qaO13aoFyXwF6s4LhpT7YFHf3Z03MqdILk6BA2BFUhoyh7k9fj9i032A=="], - - "@opentelemetry/resource-detector-alibaba-cloud": ["@opentelemetry/resource-detector-alibaba-cloud@0.31.1", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-RPitvB5oHZsECnK7xtUAFdyBXRdtJbY0eEzQPBrLMQv4l/FN4pETijqv6LcKBbn6tevaoBU2bqOGnVoL4uX4Tg=="], - - "@opentelemetry/resource-detector-aws": ["@opentelemetry/resource-detector-aws@2.1.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-7QG5wQXMiHseKIyU69m8vfZgLhrxFx48DdyaQEYj6GXjE/Xrv1nS3bUwhICjb6+4NorB9+1pFCvJ/4S01CCCjQ=="], - - "@opentelemetry/resource-detector-azure": ["@opentelemetry/resource-detector-azure@0.7.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-aR2ALsK+b/+5lLDhK9KTK8rcuKg7+sqa/Cg+QCeasqoy7qby70FRtAbQcZGljJ5BLBcVPYjl1hcTYIUyL3Laww=="], - - "@opentelemetry/resource-detector-container": ["@opentelemetry/resource-detector-container@0.7.1", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-I2vXgdA8mhIlAktIp7NovicalqKPaas9APH5wQxIzMK6jPjZmwS5x0MBW+sTsaFM4pnOf/Md9enoDnnR5CLq5A=="], - - "@opentelemetry/resource-detector-gcp": ["@opentelemetry/resource-detector-gcp@0.34.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0", "gcp-metadata": "^6.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-Mug9Oing1nVQE8pYT33UKuPSEa/wjQTMk3feS9F84h4U7oZIx5Mz3yddj3OHOPgrW/7d1Ve/mG7jmYqBI9tpTg=="], - - "@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - - "@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA=="], - - "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA=="], - - "@opentelemetry/sdk-node": ["@opentelemetry/sdk-node@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/exporter-logs-otlp-grpc": "0.200.0", "@opentelemetry/exporter-logs-otlp-http": "0.200.0", "@opentelemetry/exporter-logs-otlp-proto": "0.200.0", "@opentelemetry/exporter-metrics-otlp-grpc": "0.200.0", "@opentelemetry/exporter-metrics-otlp-http": "0.200.0", "@opentelemetry/exporter-metrics-otlp-proto": "0.200.0", "@opentelemetry/exporter-prometheus": "0.200.0", "@opentelemetry/exporter-trace-otlp-grpc": "0.200.0", "@opentelemetry/exporter-trace-otlp-http": "0.200.0", "@opentelemetry/exporter-trace-otlp-proto": "0.200.0", "@opentelemetry/exporter-zipkin": "2.0.0", "@opentelemetry/instrumentation": "0.200.0", "@opentelemetry/propagator-b3": "2.0.0", "@opentelemetry/propagator-jaeger": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-logs": "0.200.0", "@opentelemetry/sdk-metrics": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0", "@opentelemetry/sdk-trace-node": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-S/YSy9GIswnhYoDor1RusNkmRughipvTCOQrlF1dzI70yQaf68qgf5WMnzUxdlCl3/et/pvaO75xfPfuEmCK5A=="], - - "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg=="], - - "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@1.30.1", "", { "dependencies": { "@opentelemetry/context-async-hooks": "1.30.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/propagator-b3": "1.30.1", "@opentelemetry/propagator-jaeger": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "semver": "^7.5.2" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ=="], - - "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - - "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA=="], - - "@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="], - - "@oslojs/binary": ["@oslojs/binary@1.0.0", "", {}, "sha512-9RCU6OwXU6p67H4NODbuxv2S3eenuQ4/WFLrsq+K/k682xrznH5EVWA7N4VFk9VYVcbFtKqur5YQQZc0ySGhsQ=="], - - "@oslojs/crypto": ["@oslojs/crypto@1.0.1", "", { "dependencies": { "@oslojs/asn1": "1.0.0", "@oslojs/binary": "1.0.0" } }, "sha512-7n08G8nWjAr/Yu3vu9zzrd0L9XnrJfpMioQcvCMxBIiF5orECHe5/3J0jmXRVvgfqMm/+4oxlQ+Sq39COYLcNQ=="], - - "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], - - "@oslojs/jwt": ["@oslojs/jwt@0.2.0", "", { "dependencies": { "@oslojs/encoding": "0.4.1" } }, "sha512-bLE7BtHrURedCn4Mco3ma9L4Y1GR2SMBuIvjWr7rmQ4/W/4Jy70TIAgZ+0nIlk0xHz1vNP8x8DCns45Sb2XRbg=="], - - "@petamoriken/float16": ["@petamoriken/float16@3.9.2", "", {}, "sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog=="], - - "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - - "@polar-sh/sdk": ["@polar-sh/sdk@0.26.1", "", { "dependencies": { "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": ">= 3" } }, "sha512-OEaxiNJaxpeNi7LANHR5S71BAyORk6W0lwkfHcrGyMGS9VDdgXnZjB8QZ3tFSXbQvt3yZdHShX6pPC8xOxNvFw=="], - - "@postgresql-typed/oids": ["@postgresql-typed/oids@0.2.0", "", {}, "sha512-jh1nIP/nmtlZkj1t0cO2NC2lFHg/fXQhtRFsL70Rh/5ELp5fqxH/calwPVTkS8gPae1k/PTqQYbU23E+Q2q0rg=="], - - "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], - - "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], - - "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], - - "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], - - "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], - - "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], - - "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], - - "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], - - "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], - - "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], - - "@pulumi/pulumi": ["@pulumi/pulumi@3.154.0", "", { "dependencies": { "@grpc/grpc-js": "^1.10.1", "@logdna/tail-file": "^2.0.6", "@npmcli/arborist": "^7.3.1", "@opentelemetry/api": "^1.9", "@opentelemetry/exporter-zipkin": "^1.28", "@opentelemetry/instrumentation": "^0.55", "@opentelemetry/instrumentation-grpc": "^0.55", "@opentelemetry/resources": "^1.28", "@opentelemetry/sdk-trace-base": "^1.28", "@opentelemetry/sdk-trace-node": "^1.28", "@pulumi/query": "^0.3.0", "@types/google-protobuf": "^3.15.5", "@types/semver": "^7.5.6", "@types/tmp": "^0.2.6", "execa": "^5.1.0", "fdir": "^6.1.1", "google-protobuf": "^3.5.0", "got": "^11.8.6", "ini": "^2.0.0", "js-yaml": "^3.14.0", "minimist": "^1.2.6", "normalize-package-data": "^6.0.0", "picomatch": "^3.0.1", "pkg-dir": "^7.0.0", "require-from-string": "^2.0.1", "semver": "^7.5.2", "source-map-support": "^0.5.6", "tmp": "^0.2.1", "upath": "^1.1.0" }, "peerDependencies": { "ts-node": ">= 7.0.1 < 12", "typescript": ">= 3.8.3 < 6" }, "optionalPeers": ["ts-node", "typescript"] }, "sha512-FT2jHqxV0dtUK1gQy6drL8SzigygBmAc+gi0jBt+AOxWCEjAIBSYY6cmBIzi5HyuAHASiT//L6/+AWBQfpT6aA=="], - - "@pulumi/query": ["@pulumi/query@0.3.0", "", {}, "sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w=="], - - "@rocicorp/lock": ["@rocicorp/lock@1.0.4", "", { "dependencies": { "@rocicorp/resolver": "^1.0.2" } }, "sha512-FavTiO8ETXFXDVfA87IThGduTTTR8iqzBnr/c60gUUmbk7knGEXPmf2B+yiNuluJD0ku0fL2V2r62UXnsLXl6w=="], - - "@rocicorp/logger": ["@rocicorp/logger@5.4.0", "", {}, "sha512-kmMR5iLrwRIsvPZ+UXnmyAM3Mlvz6rCHrYfMsrMPgFYKLfo7amUH1RwHo6tuuqJiAvUbeaCoDtc8e+V0Mr4PSA=="], - - "@rocicorp/resolver": ["@rocicorp/resolver@1.0.2", "", {}, "sha512-TfjMTQp9cNNqNtHFfa+XHEGdA7NnmDRu+ZJH4YF3dso0Xk/b9DMhg/sl+b6CR4ThFZArXXDsG1j8Mwl34wcOZQ=="], - - "@rocicorp/zero": ["@rocicorp/zero@0.20.2025051800", "", { "dependencies": { "@badrap/valita": "0.3.11", "@databases/escape-identifier": "^1.0.3", "@databases/sql": "^3.3.0", "@dotenvx/dotenvx": "^1.39.0", "@drdgvhbh/postgres-error-codes": "^0.0.6", "@fastify/cors": "^10.0.0", "@fastify/websocket": "^11.0.0", "@google-cloud/precise-date": "^4.0.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/auto-instrumentations-node": "^0.58.1", "@opentelemetry/exporter-logs-otlp-http": "^0.200.0", "@opentelemetry/exporter-metrics-otlp-http": "^0.200.0", "@opentelemetry/exporter-trace-otlp-http": "^0.200.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-logs": "^0.200.0", "@opentelemetry/sdk-metrics": "^2.0.0", "@opentelemetry/sdk-node": "^0.200.0", "@opentelemetry/sdk-trace-node": "^2.0.0", "@postgresql-typed/oids": "^0.2.0", "@rocicorp/lock": "^1.0.4", "@rocicorp/logger": "^5.4.0", "@rocicorp/resolver": "^1.0.2", "@rocicorp/zero-sqlite3": "^1.0.4", "@types/basic-auth": "^1.1.8", "basic-auth": "^2.0.1", "chalk": "^5.3.0", "chalk-template": "^1.1.0", "chokidar": "^4.0.1", "command-line-args": "^6.0.1", "command-line-usage": "^7.0.3", "compare-utf8": "^0.1.1", "defu": "^6.1.4", "eventemitter3": "^5.0.1", "fastify": "^5.0.0", "jose": "^5.9.3", "js-xxhash": "^4.0.0", "json-custom-numbers": "^3.1.1", "kasi": "^1.1.0", "nanoid": "^5.1.2", "parse-prometheus-text-format": "^1.1.1", "pg-format": "npm:pg-format-fix@^1.0.5", "postgres": "^3.4.4", "prettier": "^3.5.3", "semver": "^7.5.4", "tsx": "^4.19.1", "typedoc": "^0.28.2", "typedoc-plugin-markdown": "^4.6.1", "url-pattern": "^1.0.3", "ws": "^8.18.1" }, "bin": { "ast-to-zql": "out/zero/src/ast-to-zql.js", "zero-cache": "out/zero/src/cli.js", "analyze-query": "out/zero/src/analyze-query.js", "zero-cache-dev": "out/zero/src/zero-cache-dev.js", "transform-query": "out/zero/src/transform-query.js", "zero-build-schema": "out/zero/src/build-schema.js", "zero-deploy-permissions": "out/zero/src/deploy-permissions.js" } }, "sha512-ttDg0WYciSWnTMVCfnONwfO9fZFcRkZjYLjYWtgq1fIsH10t2XygXQMV7kx1AGFJ+y/0EPvXV3CWXmAhFppk4w=="], - - "@rocicorp/zero-sqlite3": ["@rocicorp/zero-sqlite3@1.0.4", "", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" }, "bin": { "zero-sqlite3": "shell.ps1" } }, "sha512-bm+VUdF4CnKVjUj/dSCmVu0hjcyXaF/nKkw2rNhZUjGeBOMRy/hh8z/32h311es4dxCVvcZ3+QHQHMxF2YG5Kw=="], - - "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], - - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.38.0", "", { "os": "android", "cpu": "arm" }, "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg=="], - - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.38.0", "", { "os": "android", "cpu": "arm64" }, "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ=="], - - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.38.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg=="], - - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.38.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg=="], - - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.38.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA=="], - - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.38.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg=="], - - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.38.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg=="], - - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.38.0", "", { "os": "linux", "cpu": "arm" }, "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg=="], - - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.38.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA=="], - - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.38.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ=="], - - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.38.0", "", { "os": "linux", "cpu": "none" }, "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg=="], - - "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.38.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw=="], - - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.38.0", "", { "os": "linux", "cpu": "none" }, "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg=="], - - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.38.0", "", { "os": "linux", "cpu": "none" }, "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA=="], - - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.38.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q=="], - - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.38.0", "", { "os": "linux", "cpu": "x64" }, "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w=="], - - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.38.0", "", { "os": "linux", "cpu": "x64" }, "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g=="], - - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.38.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg=="], - - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.38.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA=="], - - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.38.0", "", { "os": "win32", "cpu": "x64" }, "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw=="], - - "@shikijs/core": ["@shikijs/core@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA=="], - - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg=="], - - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg=="], - - "@shikijs/langs": ["@shikijs/langs@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0" } }, "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ=="], - - "@shikijs/themes": ["@shikijs/themes@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0" } }, "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg=="], - - "@shikijs/types": ["@shikijs/types@3.13.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw=="], - - "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - - "@sigstore/bundle": ["@sigstore/bundle@2.3.2", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.3.2" } }, "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA=="], - - "@sigstore/core": ["@sigstore/core@1.1.0", "", {}, "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg=="], - - "@sigstore/protobuf-specs": ["@sigstore/protobuf-specs@0.3.3", "", {}, "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ=="], - - "@sigstore/sign": ["@sigstore/sign@2.3.2", "", { "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", "@sigstore/protobuf-specs": "^0.3.2", "make-fetch-happen": "^13.0.1", "proc-log": "^4.2.0", "promise-retry": "^2.0.1" } }, "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA=="], - - "@sigstore/tuf": ["@sigstore/tuf@2.3.4", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.3.2", "tuf-js": "^2.2.1" } }, "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw=="], - - "@sigstore/verify": ["@sigstore/verify@1.2.1", "", { "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.1.0", "@sigstore/protobuf-specs": "^0.3.2" } }, "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g=="], - - "@sinclair/typebox": ["@sinclair/typebox@0.34.28", "", {}, "sha512-e2B9vmvaa5ym5hWgCHw5CstP54au6AOLXrhZErLsOyyRzuWJtXl/8TszKtc5x8rw/b+oY7HKS9m9iRI53RK0WQ=="], - - "@sindresorhus/fnv1a": ["@sindresorhus/fnv1a@3.1.0", "", {}, "sha512-KV321z5m/0nuAg83W1dPLy85HpHDk7Sdi4fJbwvacWsEhAh+rZUW4ZfGcXmUIvjZg4ss2bcwNlRhJ7GBEUG08w=="], - - "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], - - "@smithy/abort-controller": ["@smithy/abort-controller@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw=="], - - "@smithy/chunked-blob-reader": ["@smithy/chunked-blob-reader@5.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw=="], - - "@smithy/chunked-blob-reader-native": ["@smithy/chunked-blob-reader-native@4.0.0", "", { "dependencies": { "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig=="], - - "@smithy/config-resolver": ["@smithy/config-resolver@4.1.0", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A=="], - - "@smithy/core": ["@smithy/core@3.2.0", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q=="], - - "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w=="], - - "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.0.4", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.3.1", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig=="], - - "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.0.4", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA=="], - - "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.1.2", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ=="], - - "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.0.4", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w=="], - - "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.0.4", "", { "dependencies": { "@smithy/eventstream-codec": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA=="], - - "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.0.2", "", { "dependencies": { "@smithy/protocol-http": "^5.1.0", "@smithy/querystring-builder": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ=="], - - "@smithy/hash-blob-browser": ["@smithy/hash-blob-browser@4.0.2", "", { "dependencies": { "@smithy/chunked-blob-reader": "^5.0.0", "@smithy/chunked-blob-reader-native": "^4.0.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g=="], - - "@smithy/hash-node": ["@smithy/hash-node@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg=="], - - "@smithy/hash-stream-node": ["@smithy/hash-stream-node@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg=="], - - "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ=="], - - "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw=="], - - "@smithy/md5-js": ["@smithy/md5-js@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA=="], - - "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.0.2", "", { "dependencies": { "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A=="], - - "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.0", "", { "dependencies": { "@smithy/core": "^3.2.0", "@smithy/middleware-serde": "^4.0.3", "@smithy/node-config-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA=="], - - "@smithy/middleware-retry": ["@smithy/middleware-retry@4.1.0", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/service-error-classification": "^4.0.2", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.2", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg=="], - - "@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.3", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A=="], - - "@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ=="], - - "@smithy/node-config-provider": ["@smithy/node-config-provider@4.0.2", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw=="], - - "@smithy/node-http-handler": ["@smithy/node-http-handler@4.0.4", "", { "dependencies": { "@smithy/abort-controller": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/querystring-builder": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g=="], - - "@smithy/property-provider": ["@smithy/property-provider@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A=="], - - "@smithy/protocol-http": ["@smithy/protocol-http@5.1.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g=="], - - "@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q=="], - - "@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q=="], - - "@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0" } }, "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ=="], - - "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw=="], - - "@smithy/signature-v4": ["@smithy/signature-v4@5.0.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw=="], - - "@smithy/smithy-client": ["@smithy/smithy-client@4.2.0", "", { "dependencies": { "@smithy/core": "^3.2.0", "@smithy/middleware-endpoint": "^4.1.0", "@smithy/middleware-stack": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw=="], - - "@smithy/types": ["@smithy/types@4.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg=="], - - "@smithy/url-parser": ["@smithy/url-parser@4.0.2", "", { "dependencies": { "@smithy/querystring-parser": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ=="], - - "@smithy/util-base64": ["@smithy/util-base64@4.0.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg=="], - - "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA=="], - - "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg=="], - - "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.0.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug=="], - - "@smithy/util-config-provider": ["@smithy/util-config-provider@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w=="], - - "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.8", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ=="], - - "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.8", "", { "dependencies": { "@smithy/config-resolver": "^4.1.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/node-config-provider": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA=="], - - "@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ=="], - - "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw=="], - - "@smithy/util-middleware": ["@smithy/util-middleware@4.0.2", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ=="], - - "@smithy/util-retry": ["@smithy/util-retry@4.0.2", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg=="], - - "@smithy/util-stream": ["@smithy/util-stream@4.2.0", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/types": "^4.2.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ=="], - - "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg=="], - - "@smithy/util-utf8": ["@smithy/util-utf8@4.0.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow=="], - - "@smithy/util-waiter": ["@smithy/util-waiter@4.0.5", "", { "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-4QvC49HTteI1gfemu0I1syWovJgPvGn7CVUoN9ZFkdvr/cCFkrEL7qNCdx/2eICqDWEGnnr68oMdSIPCLAriSQ=="], - - "@solid-primitives/event-listener": ["@solid-primitives/event-listener@2.4.0", "", { "dependencies": { "@solid-primitives/utils": "^6.3.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-TSfR1PNTfojFEYGSxSMCnUhXsaYWBo4p+cm73QmWODa9YnaQAk6PB7VjzG2bOT2D817VlvuOqTj0Qdq+MZrdGg=="], - - "@solid-primitives/storage": ["@solid-primitives/storage@4.3.1", "", { "dependencies": { "@solid-primitives/utils": "^6.3.0" }, "peerDependencies": { "@tauri-apps/plugin-store": "*", "solid-js": "^1.6.12" }, "optionalPeers": ["@tauri-apps/plugin-store"] }, "sha512-xAJsY2pvXrAaCai4N2grmWY3xh5om9suTDVzGkRF5JBpDzs3Apk+xIovdTErbW0iCzXIEefENXb9xmSzdjuLYA=="], - - "@solid-primitives/utils": ["@solid-primitives/utils@6.3.0", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-e7hTlJ1Ywh2+g/Qug+n4L1mpfxsikoIS4/sHE2EK9WatQt8UJqop/vE6bsLnXlU1xuhb/jo94Ah5Y27rd4wP7A=="], - - "@solidjs/router": ["@solidjs/router@0.15.3", "", { "peerDependencies": { "solid-js": "^1.8.6" } }, "sha512-iEbW8UKok2Oio7o6Y4VTzLj+KFCmQPGEpm1fS3xixwFBdclFVBvaQVeibl1jys4cujfAK5Kn6+uG2uBm3lxOMw=="], - - "@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="], - - "@standard-schema/spec": ["@standard-schema/spec@1.0.0-beta.3", "", {}, "sha512-0ifF3BjA1E8SY9C+nUew8RefNOIq0cDlYALPty4rhUm8Rrl6tCM8hBT4bhGhx7I7iXD0uAgt50lgo8dD73ACMw=="], - - "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], - - "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], - - "@tsconfig/bun": ["@tsconfig/bun@1.0.7", "", {}, "sha512-udGrGJBNQdXGVulehc1aWT73wkR9wdaGBtB6yL70RJsqwW/yJhIg6ZbRlPOfIUiFNrnBuYLBi9CSmMKfDC7dvA=="], - - "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], - - "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="], - - "@tsconfig/node14": ["@tsconfig/node14@1.0.3", "", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="], - - "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], - - "@tsconfig/node20": ["@tsconfig/node20@20.1.4", "", {}, "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg=="], - - "@tsconfig/node22": ["@tsconfig/node22@22.0.1", "", {}, "sha512-VkgOa3n6jvs1p+r3DiwBqeEwGAwEvnVCg/hIjiANl5IEcqP3G0u5m8cBJspe1t9qjZRlZ7WFgqq5bJrGdgAKMg=="], - - "@tufjs/canonical-json": ["@tufjs/canonical-json@2.0.0", "", {}, "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA=="], - - "@tufjs/models": ["@tufjs/models@2.0.1", "", { "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.4" } }, "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg=="], - - "@types/audioworklet": ["@types/audioworklet@0.0.50", "", {}, "sha512-Wic6k+tczhJZz4yq2ianEowIF/xH10wI9ac8sBDh27Jvs+WIvXIeM+nWPPRITFwSKuLZKlvVjfLiNmUjfy4koA=="], - - "@types/aws-lambda": ["@types/aws-lambda@8.10.147", "", {}, "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew=="], - - "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], - - "@types/babel__generator": ["@types/babel__generator@7.6.8", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw=="], - - "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], - - "@types/babel__traverse": ["@types/babel__traverse@7.20.6", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg=="], - - "@types/basic-auth": ["@types/basic-auth@1.1.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-dKcUeixGuZn8pBjcUrf1N7x5K6lWuKuwHHitM2IZ4vwZUDWEhhNtwCWiba8jTA9zn0GQQ+fTFkWpKx8pOU/enw=="], - - "@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="], - - "@types/bunyan": ["@types/bunyan@1.8.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ=="], - - "@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="], - - "@types/caseless": ["@types/caseless@0.12.5", "", {}, "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg=="], - - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], - - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - - "@types/dns-packet": ["@types/dns-packet@5.6.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q=="], - - "@types/dom-mediacapture-transform": ["@types/dom-mediacapture-transform@0.1.11", "", { "dependencies": { "@types/dom-webcodecs": "*" } }, "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ=="], - - "@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.14", "", {}, "sha512-ba9aF0qARLLQpLihONIRbj8VvAdUxO+5jIxlscVcDAQTcJmq5qVr781+ino5qbQUJUmO21cLP2eLeXYWzao5Vg=="], - - "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], - - "@types/fontkit": ["@types/fontkit@2.0.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew=="], - - "@types/google-protobuf": ["@types/google-protobuf@3.15.12", "", {}, "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ=="], - - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], - - "@types/http-cache-semantics": ["@types/http-cache-semantics@4.0.4", "", {}, "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="], - - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - - "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="], - - "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], - - "@types/memcached": ["@types/memcached@2.2.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg=="], - - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - - "@types/mysql": ["@types/mysql@2.15.26", "", { "dependencies": { "@types/node": "*" } }, "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ=="], - - "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], - - "@types/node": ["@types/node@22.13.10", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw=="], - - "@types/pg": ["@types/pg@8.15.5", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ=="], - - "@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="], - - "@types/pngjs": ["@types/pngjs@6.0.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ=="], - - "@types/qrcode": ["@types/qrcode@1.5.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg=="], - - "@types/readable-stream": ["@types/readable-stream@4.0.18", "", { "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" } }, "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA=="], - - "@types/request": ["@types/request@2.48.12", "", { "dependencies": { "@types/caseless": "*", "@types/node": "*", "@types/tough-cookie": "*", "form-data": "^2.5.0" } }, "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw=="], - - "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], - - "@types/retry": ["@types/retry@0.12.2", "", {}, "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow=="], - - "@types/sanitize-html": ["@types/sanitize-html@2.16.0", "", { "dependencies": { "htmlparser2": "^8.0.0" } }, "sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw=="], - - "@types/semver": ["@types/semver@7.5.8", "", {}, "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ=="], - - "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="], - - "@types/steamcommunity": ["@types/steamcommunity@3.43.8", "", { "dependencies": { "@types/node": "*", "@types/request": "*", "@types/steamid": "*" } }, "sha512-q742mcnxjiT3t0TyjhoTEpzmy1JI8L/p7nvvPBwNdArgjgb/5n5aWgKK8RavKIizAJ7AgjyEEfJNBY2ax8kFNw=="], - - "@types/steamid": ["@types/steamid@2.0.3", "", {}, "sha512-ozNMQViUYLU+NBN4v7X0bV1O8uTL1bA+WvfHtt9IKcydS4tyYKH7w1vq+xcPGWGL0PRhGtY7C1Zhaeyj2IsETw=="], - - "@types/tedious": ["@types/tedious@4.0.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw=="], - - "@types/tmp": ["@types/tmp@0.2.6", "", {}, "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA=="], - - "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], - - "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - - "@types/ws": ["@types/ws@8.18.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw=="], - - "@types/xml2js": ["@types/xml2js@0.4.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ=="], - - "@typescript/lib-dom": ["@types/web@0.0.115", "", {}, "sha512-IBtUgtxnITC7WTCg4tv6kCnSP0T+fM+3PzQPIzLzJY1DDlhBFKM/9+uMURw14YweWPDiFNIZ94Gc1bJtwow97g=="], - - "@typescript/vfs": ["@typescript/vfs@1.6.1", "", { "dependencies": { "debug": "^4.1.1" }, "peerDependencies": { "typescript": "*" } }, "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA=="], - - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - - "@valibot/to-json-schema": ["@valibot/to-json-schema@1.0.0-rc.0", "", { "peerDependencies": { "valibot": "^1.0.0 || ^1.0.0-beta.5 || ^1.0.0-rc" } }, "sha512-F3WDgnPzcDs9Y8qZwU9qfPnEJBQ6lCMCFjI7VsMjAza6yAixGr4cZ50gOy6zniSCk49GkFvq2a6cBKfZjTpyOw=="], - - "@vanilla-extract/babel-plugin-debug-ids": ["@vanilla-extract/babel-plugin-debug-ids@1.2.0", "", { "dependencies": { "@babel/core": "^7.23.9" } }, "sha512-z5nx2QBnOhvmlmBKeRX5sPVLz437wV30u+GJL+Hzj1rGiJYVNvgIIlzUpRNjVQ0MgAgiQIqIUbqPnmMc6HmDlQ=="], - - "@vanilla-extract/css": ["@vanilla-extract/css@1.17.1", "", { "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.6", "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.0.7", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "sha512-tOHQXHm10FrJeXKFeWE09JfDGN/tvV6mbjwoNB9k03u930Vg021vTnbrCwVLkECj9Zvh/SHLBHJ4r2flGqfovw=="], - - "@vanilla-extract/dynamic": ["@vanilla-extract/dynamic@2.1.2", "", { "dependencies": { "@vanilla-extract/private": "^1.0.6" } }, "sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A=="], - - "@vanilla-extract/integration": ["@vanilla-extract/integration@6.5.0", "", { "dependencies": { "@babel/core": "^7.20.7", "@babel/plugin-syntax-typescript": "^7.20.0", "@vanilla-extract/babel-plugin-debug-ids": "^1.0.4", "@vanilla-extract/css": "^1.14.0", "esbuild": "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0", "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "mlly": "^1.4.2", "outdent": "^0.8.0", "vite": "^5.0.11", "vite-node": "^1.2.0" } }, "sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ=="], - - "@vanilla-extract/private": ["@vanilla-extract/private@1.0.6", "", {}, "sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw=="], - - "@vanilla-extract/recipes": ["@vanilla-extract/recipes@0.2.5", "", { "peerDependencies": { "@vanilla-extract/css": "^1.0.0" } }, "sha512-OWXUUiFJdswD3+Xg8f8avuw/vAHZRFS4oHqFeoV1TcO8cfbDQ0zmkreBHvyspoJU+qsyWK48yPHKSptqNRPy9Q=="], - - "@vanilla-extract/vite-plugin": ["@vanilla-extract/vite-plugin@3.9.5", "", { "dependencies": { "@vanilla-extract/integration": "^6.3.0", "outdent": "^0.8.0", "postcss": "^8.3.6", "postcss-load-config": "^4.0.1" }, "peerDependencies": { "vite": "^2.2.3 || ^3.0.0 || ^4.0.3 || ^5.0.0" } }, "sha512-CWI/CtrVW6i3HKccI6T7uGQkTJ8bd8Xl2UMBg3Pkr7dwWMmavXTeucV0I9KSbmXaYXSbEj+Q8c9y0xAZwtmTig=="], - - "abbrev": ["abbrev@2.0.0", "", {}, "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ=="], - - "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], - - "abort-error": ["abort-error@1.0.1", "", {}, "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg=="], - - "abstract-logging": ["abstract-logging@2.0.1", "", {}, "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA=="], - - "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], - - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - - "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], - - "acorn-walk": ["acorn-walk@8.3.2", "", {}, "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="], - - "actor-core": ["actor-core@0.8.0", "", { "dependencies": { "cbor-x": "^1.6.0", "hono": "^4.7.0", "invariant": "^2.2.4", "on-change": "^5.0.1", "p-retry": "^6.2.1", "zod": "^3.24.1" }, "peerDependencies": { "eventsource": "^3.0.5", "ws": "^8.0.0" }, "optionalPeers": ["eventsource", "ws"], "bin": "./dist/cli/mod.cjs" }, "sha512-I1Ab0qr2TA3O2CF8Yi8+xSAtiDE5RBKX4O9scc88baE+wFcVEhtSwo1J6e5B8n4mwkjX/xOeKnea3gD/3jvmCw=="], - - "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - - "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], - - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - - "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], - - "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - - "any-signal": ["any-signal@4.1.1", "", {}, "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA=="], - - "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - - "arctic": ["arctic@2.3.4", "", { "dependencies": { "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", "@oslojs/jwt": "0.2.0" } }, "sha512-+p30BOWsctZp+CVYCt7oAean/hWGW42sH5LAcRQX56ttEkFJWbzXBhmSpibbzwSJkRrotmsA+oAoJoVsU0f5xA=="], - - "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], - - "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - - "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], - - "arktype": ["arktype@2.0.0-rc.25", "", { "dependencies": { "@ark/schema": "0.25.0", "@ark/util": "0.25.0" } }, "sha512-ck1kRLda55Pv6L3vIIjRb6A22LqUcjitxPGS3OscOKwFcxNReaj+ItJJiysebBbbUy+ESouXTJ+vvck33spGDQ=="], - - "array-back": ["array-back@6.2.2", "", {}, "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw=="], - - "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], - - "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], - - "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], - - "astro": ["astro@5.15.1", "", { "dependencies": { "@astrojs/compiler": "^2.12.2", "@astrojs/internal-helpers": "0.7.4", "@astrojs/markdown-remark": "6.3.8", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^3.0.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.2.0", "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.3.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", "debug": "^4.4.1", "deterministic-object-hash": "^2.0.2", "devalue": "^5.3.2", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.0", "magic-string": "^0.30.18", "magicast": "^0.3.5", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", "package-manager-detector": "^1.3.0", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.2", "shiki": "^3.12.0", "smol-toml": "^1.4.2", "tinyexec": "^1.0.1", "tinyglobby": "^0.2.14", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.6.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.17.0", "vfile": "^6.0.3", "vite": "^6.3.6", "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", "zod-to-json-schema": "^3.24.6", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "astro.js" } }, "sha512-VM679M1qxOjGo6q3vKYDNDddkALGgMopG93IwbEXd3Buc2xVLuuPj4HNziNugSbPQx5S6UReMp5uzw10EJN81A=="], - - "async": ["async@2.6.4", "", { "dependencies": { "lodash": "^4.17.14" } }, "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA=="], - - "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - - "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], - - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - - "avvio": ["avvio@9.1.0", "", { "dependencies": { "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw=="], - - "aws-crt": ["aws-crt@1.21.8", "", { "dependencies": { "@aws-sdk/util-utf8-browser": "^3.259.0", "@httptoolkit/websocket-stream": "^6.0.1", "axios": "^1.7.4", "buffer": "^6.0.3", "crypto-js": "^4.2.0", "mqtt": "^4.3.8", "process": "^0.11.10" } }, "sha512-+SH9xd/ijXJiZE816QLqG3Wk/a8xpvBqf+tpJvIvTfGIe7zsJ9N+ReP3OosUWSaaq7OIAK1PyTyITLBu7G+ERQ=="], - - "aws-iot-device-sdk-v2": ["aws-iot-device-sdk-v2@1.21.1", "", { "dependencies": { "@aws-sdk/util-utf8-browser": "^3.109.0", "aws-crt": "1.21.8" } }, "sha512-iLep4oMkGHQ2KAaRfZWYpOYSCHuX0jlp7yknYcy4QXY7EAICtS564B+vnvdQND6Cpy8bajtK5sDyID//sdUtLw=="], - - "aws-sdk": ["aws-sdk@2.1692.0", "", { "dependencies": { "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", "jmespath": "0.16.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", "util": "^0.12.4", "uuid": "8.0.0", "xml2js": "0.6.2" } }, "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw=="], - - "aws-sign2": ["aws-sign2@0.7.0", "", {}, "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="], - - "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], - - "aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="], - - "axios": ["axios@1.8.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg=="], - - "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], - - "babel-plugin-jsx-dom-expressions": ["babel-plugin-jsx-dom-expressions@0.39.7", "", { "dependencies": { "@babel/helper-module-imports": "7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/types": "^7.20.7", "html-entities": "2.3.3", "parse5": "^7.1.2", "validate-html-nesting": "^1.2.1" }, "peerDependencies": { "@babel/core": "^7.20.12" } }, "sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA=="], - - "babel-preset-solid": ["babel-preset-solid@1.9.5", "", { "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.39.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w=="], - - "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], - - "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - - "basic-auth": ["basic-auth@2.0.1", "", { "dependencies": { "safe-buffer": "5.1.2" } }, "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="], - - "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], - - "bignumber.js": ["bignumber.js@9.3.0", "", {}, "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA=="], - - "bin-links": ["bin-links@4.0.4", "", { "dependencies": { "cmd-shim": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", "read-cmd-shim": "^4.0.0", "write-file-atomic": "^5.0.0" } }, "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA=="], - - "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], - - "bl": ["bl@6.0.20", "", { "dependencies": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^4.2.0" } }, "sha512-JMP0loH6ApbpT4Aa9oU5NqAkdDvcyc8koeuK8i5mYoBCVj3XCXG0uweGNN2m6DqaCO2yRHdm+MjCeTsR5VsmcA=="], - - "body-parser": ["body-parser@2.1.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.0", "http-errors": "^2.0.0", "iconv-lite": "^0.5.2", "on-finished": "^2.4.1", "qs": "^6.14.0", "raw-body": "^3.0.0", "type-is": "^2.0.0" } }, "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ=="], - - "body-scroll-lock-upgrade": ["body-scroll-lock-upgrade@1.1.0", "", {}, "sha512-nnfVAS+tB7CS9RaksuHVTpgHWHF7fE/ptIBJnwZrMqImIvWJF1OGcLnMpBhC6qhkx9oelvyxmWXwmIJXCV98Sw=="], - - "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], - - "bowser": ["bowser@2.11.0", "", {}, "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="], - - "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], - - "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - - "brotli": ["brotli@1.3.3", "", { "dependencies": { "base64-js": "^1.1.2" } }, "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg=="], - - "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], - - "buffer": ["buffer@4.9.2", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="], - - "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - - "bun-types": ["bun-types@1.2.5", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg=="], - - "bytebuffer": ["bytebuffer@5.0.1", "", { "dependencies": { "long": "~3" } }, "sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ=="], - - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - - "cacache": ["cacache@18.0.4", "", { "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" } }, "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ=="], - - "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="], - - "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="], - - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - - "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], - - "caniuse-lite": ["caniuse-lite@1.0.30001703", "", {}, "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ=="], - - "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], - - "cbor-extract": ["cbor-extract@2.2.0", "", { "dependencies": { "node-gyp-build-optional-packages": "5.1.1" }, "optionalDependencies": { "@cbor-extract/cbor-extract-darwin-arm64": "2.2.0", "@cbor-extract/cbor-extract-darwin-x64": "2.2.0", "@cbor-extract/cbor-extract-linux-arm": "2.2.0", "@cbor-extract/cbor-extract-linux-arm64": "2.2.0", "@cbor-extract/cbor-extract-linux-x64": "2.2.0", "@cbor-extract/cbor-extract-win32-x64": "2.2.0" }, "bin": { "download-cbor-prebuilds": "bin/download-prebuilds.js" } }, "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA=="], - - "cbor-x": ["cbor-x@1.6.0", "", { "optionalDependencies": { "cbor-extract": "^2.2.0" } }, "sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg=="], - - "cborg": ["cborg@4.2.18", "", { "bin": { "cborg": "lib/bin.js" } }, "sha512-uzhkd5HOaLccokqeZa5B0Qz7/aa9C12pmUq5yU3vcy6I6OhTKdPHSzOuBPZfcoQHdcx8Emz/dWZbPNNfF/puvg=="], - - "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], - - "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - - "chalk-template": ["chalk-template@1.1.0", "", { "dependencies": { "chalk": "^5.2.0" } }, "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg=="], - - "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], - - "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], - - "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], - - "cheerio": ["cheerio@0.22.0", "", { "dependencies": { "css-select": "~1.2.0", "dom-serializer": "~0.1.0", "entities": "~1.1.1", "htmlparser2": "^3.9.1", "lodash.assignin": "^4.0.9", "lodash.bind": "^4.1.4", "lodash.defaults": "^4.0.1", "lodash.filter": "^4.4.0", "lodash.flatten": "^4.2.0", "lodash.foreach": "^4.3.0", "lodash.map": "^4.4.0", "lodash.merge": "^4.4.0", "lodash.pick": "^4.2.1", "lodash.reduce": "^4.4.0", "lodash.reject": "^4.4.0", "lodash.some": "^4.4.0" } }, "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA=="], - - "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - - "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], - - "ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], - - "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], - - "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - - "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], - - "cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], - - "clone": ["clone@2.1.2", "", {}, "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="], - - "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], - - "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - - "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], - - "cmd-shim": ["cmd-shim@6.0.3", "", {}, "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA=="], - - "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], - - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], - - "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - - "command-line-args": ["command-line-args@6.0.1", "", { "dependencies": { "array-back": "^6.2.2", "find-replace": "^5.0.2", "lodash.camelcase": "^4.3.0", "typical": "^7.2.0" }, "peerDependencies": { "@75lb/nature": "latest" }, "optionalPeers": ["@75lb/nature"] }, "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg=="], - - "command-line-usage": ["command-line-usage@7.0.3", "", { "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", "table-layout": "^4.1.0", "typical": "^7.1.1" } }, "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q=="], - - "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - - "commist": ["commist@3.2.0", "", {}, "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw=="], - - "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], - - "compare-utf8": ["compare-utf8@0.1.1", "", {}, "sha512-bND8Irz+KrF96w4Tkm1m8u5q8iE2fnvP196sHGy7XNrGNXlhyl07VnsCRYrXgEhhf/lM7hyCKRnMeh8Icis4Sw=="], - - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - - "concat-stream": ["concat-stream@2.0.0", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="], - - "confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "content-disposition": ["content-disposition@1.0.0", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg=="], - - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - - "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], - - "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], - - "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], - - "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - - "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], - - "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], - - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - - "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - - "crypto-js": ["crypto-js@4.2.0", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="], - - "css-select": ["css-select@1.2.0", "", { "dependencies": { "boolbase": "~1.0.0", "css-what": "2.1", "domutils": "1.5.1", "nth-check": "~1.0.1" } }, "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA=="], - - "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], - - "css-what": ["css-what@6.1.0", "", {}, "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="], - - "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - - "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - - "cuint": ["cuint@0.2.2", "", {}, "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw=="], - - "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], - - "datastore-core": ["datastore-core@11.0.2", "", { "dependencies": { "@libp2p/logger": "^6.0.0", "interface-datastore": "^9.0.0", "interface-store": "^7.0.0", "it-drain": "^3.0.9", "it-filter": "^3.1.3", "it-map": "^3.1.3", "it-merge": "^3.0.11", "it-pipe": "^3.0.1", "it-sort": "^3.0.8", "it-take": "^3.0.8" } }, "sha512-0pN4hMcaCWcnUBo5OL/8j14Lt1l/p1v2VvzryRYeJAKRLqnFrzy2FhAQ7y0yTA63ki760ImQHfm2XlZrfIdFpQ=="], - - "db0": ["db0@0.3.1", "", { "peerDependencies": { "@electric-sql/pglite": "*", "@libsql/client": "*", "better-sqlite3": "*", "drizzle-orm": "*", "mysql2": "*", "sqlite3": "*" }, "optionalPeers": ["@electric-sql/pglite", "@libsql/client", "better-sqlite3", "drizzle-orm", "mysql2", "sqlite3"] }, "sha512-3RogPLE2LLq6t4YiFCREyl572aBjkfMvfwPyN51df00TbPbryL3XqBYuJ/j6mgPssPK8AKfYdLxizaO5UG10sA=="], - - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - - "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], - - "decode-named-character-reference": ["decode-named-character-reference@1.1.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w=="], - - "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], - - "dedent": ["dedent@1.5.3", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ=="], - - "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], - - "deep-object-diff": ["deep-object-diff@1.1.9", "", {}, "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA=="], - - "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - - "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], - - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - - "delay": ["delay@6.0.0", "", {}, "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw=="], - - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - - "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], - - "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], - - "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], - - "detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="], - - "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], - - "devalue": ["devalue@5.4.1", "", {}, "sha512-YtoaOfsqjbZQKGIMRYDWKjUmSB4VJ/RElB+bXZawQAQYAo4xu08GKTMVlsZDTF6R2MbAgjcAQRPI5eIyRAT2OQ=="], - - "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - - "dfa": ["dfa@1.2.0", "", {}, "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="], - - "diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], - - "dijkstrajs": ["dijkstrajs@1.0.3", "", {}, "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="], - - "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], - - "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], - - "dom-serializer": ["dom-serializer@0.1.1", "", { "dependencies": { "domelementtype": "^1.3.0", "entities": "^1.1.1" } }, "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA=="], - - "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - - "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - - "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - - "dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], - - "drizzle-kit": ["drizzle-kit@0.30.5", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.19.7", "esbuild-register": "^3.5.0", "gel": "^2.0.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-l6dMSE100u7sDaTbLczibrQZjA35jLsHNqIV+jmhNVO3O8jzM6kywMOmV9uOz9ZVSCMPQhAZEFjL/qDPVrqpUA=="], - - "drizzle-orm": ["drizzle-orm@0.40.0", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-7ptk/HQiMSrEZHnAsSlBESXWj52VwgMmyTEfoNmpNN2ZXpcz13LwHfXTIghsAEud7Z5UJhDOp8U07ujcqme7wg=="], - - "drizzle-zod": ["drizzle-zod@0.7.1", "", { "peerDependencies": { "drizzle-orm": ">=0.36.0", "zod": ">=3.0.0" } }, "sha512-nZzALOdz44/AL2U005UlmMqaQ1qe5JfanvLujiTHiiT8+vZJTBFhj3pY4Vk+L6UWyKFfNmLhk602Hn4kCTynKQ=="], - - "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "duplexify": ["duplexify@4.1.3", "", { "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.2" } }, "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA=="], - - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - - "ecc-jsbn": ["ecc-jsbn@0.1.2", "", { "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw=="], - - "eciesjs": ["eciesjs@0.4.14", "", { "dependencies": { "@ecies/ciphers": "^0.2.2", "@noble/ciphers": "^1.0.0", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0" } }, "sha512-eJAgf9pdv214Hn98FlUzclRMYWF7WfoLlkS9nWMTm1qcCwn6Ad4EGD9lr9HXMBfSrZhYQujRE+p0adPRkctC6A=="], - - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - - "effect": ["effect@3.13.8", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-v4659n0zzu9UEbbs7wrsQyrWl4yaqSPQDVVMCUVtiOp54zqzIw3HK4FUr7peOkmx63aXRHofiXpmY8GXDeez+g=="], - - "electron-to-chromium": ["electron-to-chromium@1.5.113", "", {}, "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg=="], - - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - - "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], - - "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], - - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - - "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], - - "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - - "esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], - - "esbuild-android-64": ["esbuild-android-64@0.14.54", "", { "os": "android", "cpu": "x64" }, "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ=="], - - "esbuild-android-arm64": ["esbuild-android-arm64@0.14.54", "", { "os": "android", "cpu": "arm64" }, "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg=="], - - "esbuild-darwin-64": ["esbuild-darwin-64@0.14.54", "", { "os": "darwin", "cpu": "x64" }, "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug=="], - - "esbuild-darwin-arm64": ["esbuild-darwin-arm64@0.14.54", "", { "os": "darwin", "cpu": "arm64" }, "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw=="], - - "esbuild-freebsd-64": ["esbuild-freebsd-64@0.14.54", "", { "os": "freebsd", "cpu": "x64" }, "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg=="], - - "esbuild-freebsd-arm64": ["esbuild-freebsd-arm64@0.14.54", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q=="], - - "esbuild-linux-32": ["esbuild-linux-32@0.14.54", "", { "os": "linux", "cpu": "ia32" }, "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw=="], - - "esbuild-linux-64": ["esbuild-linux-64@0.14.54", "", { "os": "linux", "cpu": "x64" }, "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg=="], - - "esbuild-linux-arm": ["esbuild-linux-arm@0.14.54", "", { "os": "linux", "cpu": "arm" }, "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw=="], - - "esbuild-linux-arm64": ["esbuild-linux-arm64@0.14.54", "", { "os": "linux", "cpu": "arm64" }, "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig=="], - - "esbuild-linux-mips64le": ["esbuild-linux-mips64le@0.14.54", "", { "os": "linux", "cpu": "none" }, "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw=="], - - "esbuild-linux-ppc64le": ["esbuild-linux-ppc64le@0.14.54", "", { "os": "linux", "cpu": "ppc64" }, "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ=="], - - "esbuild-linux-riscv64": ["esbuild-linux-riscv64@0.14.54", "", { "os": "linux", "cpu": "none" }, "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg=="], - - "esbuild-linux-s390x": ["esbuild-linux-s390x@0.14.54", "", { "os": "linux", "cpu": "s390x" }, "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA=="], - - "esbuild-netbsd-64": ["esbuild-netbsd-64@0.14.54", "", { "os": "none", "cpu": "x64" }, "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w=="], - - "esbuild-openbsd-64": ["esbuild-openbsd-64@0.14.54", "", { "os": "openbsd", "cpu": "x64" }, "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw=="], - - "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], - - "esbuild-sunos-64": ["esbuild-sunos-64@0.14.54", "", { "os": "sunos", "cpu": "x64" }, "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw=="], - - "esbuild-windows-32": ["esbuild-windows-32@0.14.54", "", { "os": "win32", "cpu": "ia32" }, "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w=="], - - "esbuild-windows-64": ["esbuild-windows-64@0.14.54", "", { "os": "win32", "cpu": "x64" }, "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ=="], - - "esbuild-windows-arm64": ["esbuild-windows-arm64@0.14.54", "", { "os": "win32", "cpu": "arm64" }, "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg=="], - - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - - "eval": ["eval@0.1.8", "", { "dependencies": { "@types/node": "*", "require-like": ">= 0.1.1" } }, "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw=="], - - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], - - "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - - "events": ["events@1.1.1", "", {}, "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw=="], - - "eventsource": ["eventsource@3.0.6", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA=="], - - "eventsource-parser": ["eventsource-parser@3.0.1", "", {}, "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA=="], - - "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - - "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], - - "exponential-backoff": ["exponential-backoff@3.1.2", "", {}, "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA=="], - - "express": ["express@5.0.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.0.1", "content-disposition": "^1.0.0", "content-type": "~1.0.4", "cookie": "0.7.1", "cookie-signature": "^1.2.1", "debug": "4.3.6", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "^2.0.0", "fresh": "2.0.0", "http-errors": "2.0.0", "merge-descriptors": "^2.0.0", "methods": "~1.1.2", "mime-types": "^3.0.0", "on-finished": "2.4.1", "once": "1.4.0", "parseurl": "~1.3.3", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", "router": "^2.0.0", "safe-buffer": "5.2.1", "send": "^1.1.0", "serve-static": "^2.1.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "^2.0.0", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ=="], - - "express-rate-limit": ["express-rate-limit@7.5.0", "", { "peerDependencies": { "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg=="], - - "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - - "extsprintf": ["extsprintf@1.3.0", "", {}, "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="], - - "fast-average-color": ["fast-average-color@9.5.0", "", {}, "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg=="], - - "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], - - "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], - - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - - "fast-json-stringify": ["fast-json-stringify@6.0.1", "", { "dependencies": { "@fastify/merge-json-schemas": "^0.2.0", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0", "json-schema-ref-resolver": "^2.0.0", "rfdc": "^1.2.0" } }, "sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg=="], - - "fast-querystring": ["fast-querystring@1.1.2", "", { "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg=="], - - "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], - - "fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="], - - "fast-unique-numbers": ["fast-unique-numbers@8.0.13", "", { "dependencies": { "@babel/runtime": "^7.23.8", "tslib": "^2.6.2" } }, "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g=="], - - "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], - - "fast-xml-parser": ["fast-xml-parser@4.4.1", "", { "dependencies": { "strnum": "^1.0.5" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw=="], - - "fastify": ["fastify@5.2.1", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.0", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^6.0.0", "find-my-way": "^9.0.0", "light-my-request": "^6.0.0", "pino": "^9.0.0", "process-warning": "^4.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^3.0.1", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-rslrNBF67eg8/Gyn7P2URV8/6pz8kSAscFL4EThZJ8JBMaXacVdVE4hmUcnPNKERl5o/xTiBSLfdowBRhVF1WA=="], - - "fastify-plugin": ["fastify-plugin@5.0.1", "", {}, "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ=="], - - "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], - - "fdir": ["fdir@6.4.3", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw=="], - - "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], - - "finalhandler": ["finalhandler@2.1.0", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q=="], - - "find-my-way": ["find-my-way@9.2.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^4.0.0" } }, "sha512-d3uCir8Hmg7W1Ywp8nKf2lJJYU9Nwinvo+1D39Dn09nz65UKXIxUh7j7K8zeWhxqe1WrkS7FJyON/Q/3lPoc6w=="], - - "find-replace": ["find-replace@5.0.2", "", { "peerDependencies": { "@75lb/nature": "latest" }, "optionalPeers": ["@75lb/nature"] }, "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q=="], - - "find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], - - "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], - - "focus-trap": ["focus-trap@7.6.4", "", { "dependencies": { "tabbable": "^6.2.0" } }, "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw=="], - - "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], - - "fontace": ["fontace@0.3.0", "", { "dependencies": { "@types/fontkit": "^2.0.8", "fontkit": "^2.0.4" } }, "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg=="], - - "fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="], - - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - - "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - - "forever-agent": ["forever-agent@0.6.1", "", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="], - - "form-data": ["form-data@2.5.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ=="], - - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - - "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], - - "framer-motion": ["framer-motion@12.6.2", "", { "dependencies": { "motion-dom": "^12.6.1", "motion-utils": "^12.5.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-7LgPRlPs5aG8UxeZiMCMZz8firC53+2+9TnWV22tuSi38D3IFRxHRUqOREKckAkt6ztX+Dn6weLcatQilJTMcg=="], - - "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - - "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], - - "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], - - "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], - - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], - - "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], - - "gel": ["gel@2.0.1", "", { "dependencies": { "@petamoriken/float16": "^3.8.7", "debug": "^4.3.4", "env-paths": "^3.0.0", "semver": "^7.6.2", "shell-quote": "^1.8.1", "which": "^4.0.0" }, "bin": { "gel": "dist/cli.mjs" } }, "sha512-gfem3IGvqKqXwEq7XseBogyaRwGsQGuE7Cw/yQsjLGdgiyqX92G1xENPCE0ltunPGcsJIa6XBOTx/PK169mOqw=="], - - "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], - - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - - "get-east-asian-width": ["get-east-asian-width@1.3.1", "", {}, "sha512-R1QfovbPsKmosqTnPoRFiJ7CF9MLRgb53ChvMZm+r4p76/+8yKDy17qLL2PKInORy2RkZZekuK0efYgmzTkXyQ=="], - - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-iterator": ["get-iterator@2.0.1", "", {}, "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - - "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - - "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="], - - "getpass": ["getpass@0.1.7", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], - - "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], - - "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], - - "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], - - "globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], - - "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], - - "google-protobuf": ["google-protobuf@3.21.4", "", {}, "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ=="], - - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="], - - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - - "h3": ["h3@1.15.4", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.2", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ=="], - - "har-schema": ["har-schema@2.0.0", "", {}, "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="], - - "har-validator": ["har-validator@5.1.5", "", { "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w=="], - - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - - "hashlru": ["hashlru@2.3.0", "", {}, "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], - - "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], - - "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], - - "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], - - "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], - - "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], - - "hast-util-to-parse5": ["hast-util-to-parse5@8.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw=="], - - "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], - - "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - - "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], - - "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], - - "hono": ["hono@4.7.8", "", {}, "sha512-PCibtFdxa7/Ldud9yddl1G81GjYaeMYYTq4ywSaNsYbB1Lug4mwtOMJf2WXykL0pntYwmpRJeOI3NmoDgD+Jxw=="], - - "hono-openapi": ["hono-openapi@0.4.8", "", { "dependencies": { "json-schema-walker": "^2.0.0" }, "peerDependencies": { "@hono/arktype-validator": "^2.0.0", "@hono/effect-validator": "^1.2.0", "@hono/typebox-validator": "^0.2.0 || ^0.3.0", "@hono/valibot-validator": "^0.5.1", "@hono/zod-validator": "^0.4.1", "@sinclair/typebox": "^0.34.9", "@valibot/to-json-schema": "^1.0.0-beta.3", "arktype": "^2.0.0", "effect": "^3.11.3", "hono": "^4.6.13", "openapi-types": "^12.1.3", "valibot": "^1.0.0-beta.9", "zod": "^3.23.8", "zod-openapi": "^4.0.0" }, "optionalPeers": ["@hono/arktype-validator", "@hono/effect-validator", "@hono/typebox-validator", "@hono/valibot-validator", "@hono/zod-validator", "@sinclair/typebox", "@valibot/to-json-schema", "arktype", "effect", "hono", "valibot", "zod", "zod-openapi"] }, "sha512-LYr5xdtD49M7hEAduV1PftOMzuT8ZNvkyWfh1DThkLsIr4RkvDb12UxgIiFbwrJB6FLtFXLoOZL9x4IeDk2+VA=="], - - "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], - - "html-entities": ["html-entities@2.3.3", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], - - "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], - - "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - - "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], - - "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], - - "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], - - "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - - "http-signature": ["http-signature@1.2.0", "", { "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ=="], - - "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="], - - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - - "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - - "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - - "ieee754": ["ieee754@1.1.13", "", {}, "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="], - - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - - "ignore-walk": ["ignore-walk@6.0.5", "", { "dependencies": { "minimatch": "^9.0.0" } }, "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A=="], - - "image-size": ["image-size@0.8.3", "", { "dependencies": { "queue": "6.0.1" }, "bin": { "image-size": "bin/image-size.js" } }, "sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg=="], - - "import-in-the-middle": ["import-in-the-middle@1.13.1", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA=="], - - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], - - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - - "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], - - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], - - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], - - "interface-datastore": ["interface-datastore@9.0.2", "", { "dependencies": { "interface-store": "^7.0.0", "uint8arrays": "^5.1.0" } }, "sha512-jebn+GV/5LTDDoyicNIB4D9O0QszpPqT09Z/MpEWvf3RekjVKpXJCDguM5Au2fwIFxFDAQMZe5bSla0jMamCNg=="], - - "interface-store": ["interface-store@7.0.1", "", {}, "sha512-OPRRUO3Cs6Jr/t98BrJLQp1jUTPgrRH0PqFfuNoPAqd+J7ABN1tjFVjQdaOBiybYJTS/AyBSZnZVWLPvp3dW3w=="], - - "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], - - "ioredis": ["ioredis@5.6.0", "", { "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg=="], - - "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], - - "ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], - - "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], - - "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], - - "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - - "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], - - "is-electron": ["is-electron@2.2.2", "", {}, "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg=="], - - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - - "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], - - "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], - - "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], - - "is-loopback-addr": ["is-loopback-addr@2.0.2", "", {}, "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg=="], - - "is-network-error": ["is-network-error@1.1.0", "", {}, "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g=="], - - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - - "is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="], - - "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], - - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - - "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - - "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], - - "is-what": ["is-what@4.1.16", "", {}, "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="], - - "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], - - "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], - - "isomorphic-ws": ["isomorphic-ws@4.0.1", "", { "peerDependencies": { "ws": "*" } }, "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w=="], - - "isstream": ["isstream@0.1.2", "", {}, "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="], - - "it-all": ["it-all@3.0.9", "", {}, "sha512-fz1oJJ36ciGnu2LntAlE6SA97bFZpW7Rnt0uEc1yazzR2nKokZLr8lIRtgnpex4NsmaBcvHF+Z9krljWFy/mmg=="], - - "it-drain": ["it-drain@3.0.10", "", {}, "sha512-0w/bXzudlyKIyD1+rl0xUKTI7k4cshcS43LTlBiGFxI8K1eyLydNPxGcsVLsFVtKh1/ieS8AnVWt6KwmozxyEA=="], - - "it-filter": ["it-filter@3.1.4", "", { "dependencies": { "it-peekable": "^3.0.0" } }, "sha512-80kWEKgiFEa4fEYD3mwf2uygo1dTQ5Y5midKtL89iXyjinruA/sNXl6iFkTcdNedydjvIsFhWLiqRPQP4fAwWQ=="], - - "it-foreach": ["it-foreach@2.1.4", "", { "dependencies": { "it-peekable": "^3.0.0" } }, "sha512-gFntBbNLpVK9uDmaHusugICD8/Pp+OCqbF5q1Z8K+B8WaG20YgMePWbMxI1I25+JmNWWr3hk0ecKyiI9pOLgeA=="], - - "it-length-prefixed": ["it-length-prefixed@10.0.1", "", { "dependencies": { "it-reader": "^6.0.1", "it-stream-types": "^2.0.1", "uint8-varint": "^2.0.1", "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.1" } }, "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ=="], - - "it-map": ["it-map@3.1.4", "", { "dependencies": { "it-peekable": "^3.0.0" } }, "sha512-QB9PYQdE9fUfpVFYfSxBIyvKynUCgblb143c+ktTK6ZuKSKkp7iH58uYFzagqcJ5HcqIfn1xbfaralHWam+3fg=="], - - "it-merge": ["it-merge@3.0.12", "", { "dependencies": { "it-queueless-pushable": "^2.0.0" } }, "sha512-nnnFSUxKlkZVZD7c0jYw6rDxCcAQYcMsFj27thf7KkDhpj0EA0g9KHPxbFzHuDoc6US2EPS/MtplkNj8sbCx4Q=="], - - "it-parallel": ["it-parallel@3.0.13", "", { "dependencies": { "p-defer": "^4.0.1" } }, "sha512-85PPJ/O8q97Vj9wmDTSBBXEkattwfQGruXitIzrh0RLPso6RHfiVqkuTqBNufYYtB1x6PSkh0cwvjmMIkFEPHA=="], - - "it-peekable": ["it-peekable@3.0.8", "", {}, "sha512-7IDBQKSp/dtBxXV3Fj0v3qM1jftJ9y9XrWLRIuU1X6RdKqWiN60syNwP0fiDxZD97b8SYM58dD3uklIk1TTQAw=="], - - "it-pipe": ["it-pipe@3.0.1", "", { "dependencies": { "it-merge": "^3.0.0", "it-pushable": "^3.1.2", "it-stream-types": "^2.0.1" } }, "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA=="], - - "it-pushable": ["it-pushable@3.2.3", "", { "dependencies": { "p-defer": "^4.0.0" } }, "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg=="], - - "it-queue": ["it-queue@1.1.0", "", { "dependencies": { "abort-error": "^1.0.1", "it-pushable": "^3.2.3", "main-event": "^1.0.0", "race-event": "^1.3.0", "race-signal": "^1.1.3" } }, "sha512-aK9unJRIaJc9qiv53LByhF7/I2AuD7Ro4oLfLieVLL9QXNvRx++ANMpv8yCp2UO0KAtBuf70GOxSYb6ElFVRpQ=="], - - "it-queueless-pushable": ["it-queueless-pushable@2.0.2", "", { "dependencies": { "abort-error": "^1.0.1", "p-defer": "^4.0.1", "race-signal": "^1.1.3" } }, "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA=="], - - "it-reader": ["it-reader@6.0.4", "", { "dependencies": { "it-stream-types": "^2.0.1", "uint8arraylist": "^2.0.0" } }, "sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg=="], - - "it-sort": ["it-sort@3.0.9", "", { "dependencies": { "it-all": "^3.0.0" } }, "sha512-jsM6alGaPiQbcAJdzMsuMh00uJcI+kD9TBoScB8TR75zUFOmHvhSsPi+Dmh2zfVkcoca+14EbfeIZZXTUGH63w=="], - - "it-stream-types": ["it-stream-types@2.0.2", "", {}, "sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww=="], - - "it-take": ["it-take@3.0.9", "", {}, "sha512-XMeUbnjOcgrhFXPUqa7H0VIjYSV/BvyxxjCp76QHVAFDJw2LmR1SHxUFiqyGeobgzJr7P2ZwSRRJQGn4D2BVlA=="], - - "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], - - "javascript-stringify": ["javascript-stringify@2.1.0", "", {}, "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="], - - "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - - "jmespath": ["jmespath@0.16.0", "", {}, "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="], - - "jose": ["jose@5.2.3", "", {}, "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="], - - "js-sdsl": ["js-sdsl@4.3.0", "", {}, "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ=="], - - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - - "js-xxhash": ["js-xxhash@4.0.0", "", {}, "sha512-3Q2eIqG6s1KEBBmkj9tGM9lef8LJbuRyTVBdI3GpTnrvtytunjLPO0wqABp5qhtMzfA32jYn1FlnIV7GH1RAHQ=="], - - "js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], - - "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], - - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - - "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], - - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - - "json-custom-numbers": ["json-custom-numbers@3.1.1", "", {}, "sha512-rYIAIuiIRy58aax2tuZb7HawKFATBG848PiguybJh/R+pvC8jxjEOVBQHj4J3U2D4/Y4acBCO4A/glILW8wPoA=="], - - "json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], - - "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], - - "json-schema-ref-resolver": ["json-schema-ref-resolver@2.0.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q=="], - - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - - "json-schema-walker": ["json-schema-walker@2.0.0", "", { "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.1.0", "clone": "^2.1.2" } }, "sha512-nXN2cMky0Iw7Af28w061hmxaPDaML5/bQD9nwm1lOoIKEGjHcRGxqWe4MfrkYThYAPjSUhmsp4bJNoLAyVn9Xw=="], - - "json-stringify-nice": ["json-stringify-nice@1.1.4", "", {}, "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw=="], - - "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], - - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - - "jsonparse": ["jsonparse@1.3.1", "", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="], - - "jsprim": ["jsprim@1.4.2", "", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw=="], - - "just-diff": ["just-diff@6.0.2", "", {}, "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA=="], - - "just-diff-apply": ["just-diff-apply@5.5.0", "", {}, "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw=="], - - "kasi": ["kasi@1.1.1", "", {}, "sha512-pzBwGWFIjf84T/8aD0XzMli1T3Ckr/jVLh6v0Jskwiv5ehmcgDM+vpYFSk8WzGn4ed4HqgaifTgQUHzzZHa+Qw=="], - - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - - "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], - - "kvparser": ["kvparser@1.0.2", "", {}, "sha512-5P/5qpTAHjVYWqcI55B3yQwSY2FUrYYrJj5i65V1Wmg7/4W4OnBcaodaEvLyVuugeOnS+BAaKm9LbPazGJcRyA=="], - - "leven": ["leven@2.1.0", "", {}, "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA=="], - - "libp2p": ["libp2p@3.0.6", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/interface-internal": "^3.0.5", "@libp2p/logger": "^6.0.5", "@libp2p/multistream-select": "^7.0.5", "@libp2p/peer-collections": "^7.0.5", "@libp2p/peer-id": "^6.0.3", "@libp2p/peer-store": "^12.0.5", "@libp2p/utils": "^7.0.5", "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "any-signal": "^4.1.1", "datastore-core": "^11.0.1", "interface-datastore": "^9.0.1", "it-merge": "^3.0.12", "it-parallel": "^3.0.13", "main-event": "^1.0.1", "multiformats": "^13.4.0", "p-defer": "^4.0.1", "p-event": "^7.0.0", "p-retry": "^7.0.0", "progress-events": "^1.0.1", "race-signal": "^2.0.0", "uint8arrays": "^5.1.0" } }, "sha512-QtEbPVTjsHNy0B503ZXRwhoMawEdy+HOHaywJHTB3yHduzgJq+dN7gJFChnyFE8t45UhGZK50bO/+Q0q+5xXhw=="], - - "light-my-request": ["light-my-request@6.6.0", "", { "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A=="], - - "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], - - "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], - - "locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], - - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - - "lodash.assignin": ["lodash.assignin@4.2.0", "", {}, "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg=="], - - "lodash.bind": ["lodash.bind@4.2.1", "", {}, "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA=="], - - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - - "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], - - "lodash.filter": ["lodash.filter@4.6.0", "", {}, "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ=="], - - "lodash.flatten": ["lodash.flatten@4.4.0", "", {}, "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="], - - "lodash.foreach": ["lodash.foreach@4.5.0", "", {}, "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="], - - "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], - - "lodash.map": ["lodash.map@4.6.0", "", {}, "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q=="], - - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - - "lodash.pick": ["lodash.pick@4.4.0", "", {}, "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="], - - "lodash.reduce": ["lodash.reduce@4.6.0", "", {}, "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw=="], - - "lodash.reject": ["lodash.reject@4.6.0", "", {}, "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ=="], - - "lodash.some": ["lodash.some@4.6.0", "", {}, "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ=="], - - "long": ["long@5.3.1", "", {}, "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng=="], - - "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - - "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], - - "lru-cache": ["lru-cache@11.1.0", "", {}, "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="], - - "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="], - - "magic-string": ["magic-string@0.30.18", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ=="], - - "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], - - "main-event": ["main-event@1.0.1", "", {}, "sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw=="], - - "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], - - "make-fetch-happen": ["make-fetch-happen@13.0.1", "", { "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", "http-cache-semantics": "^4.1.1", "is-lambda": "^1.0.1", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" } }, "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA=="], - - "markdown-it": ["markdown-it@14.1.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg=="], - - "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], - - "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], - - "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], - - "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], - - "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], - - "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], - - "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], - - "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], - - "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], - - "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], - - "mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="], - - "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], - - "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - - "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], - - "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], - - "media-query-parser": ["media-query-parser@2.0.2", "", { "dependencies": { "@babel/runtime": "^7.12.5" } }, "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w=="], - - "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], - - "merge-anything": ["merge-anything@5.1.7", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ=="], - - "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], - - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - - "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], - - "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], - - "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], - - "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], - - "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], - - "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], - - "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], - - "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], - - "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], - - "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], - - "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], - - "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], - - "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], - - "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], - - "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], - - "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], - - "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], - - "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], - - "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], - - "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], - - "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], - - "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], - - "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], - - "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], - - "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], - - "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], - - "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], - - "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], - - "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], - - "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - - "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], - - "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - - "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - - "minipass-collect": ["minipass-collect@2.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw=="], - - "minipass-fetch": ["minipass-fetch@3.0.5", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg=="], - - "minipass-flush": ["minipass-flush@1.0.5", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="], - - "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], - - "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], - - "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], - - "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - - "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], - - "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], - - "mnemonist": ["mnemonist@0.40.0", "", { "dependencies": { "obliterator": "^2.0.4" } }, "sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg=="], - - "modern-ahocorasick": ["modern-ahocorasick@1.1.0", "", {}, "sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ=="], - - "modern-normalize": ["modern-normalize@3.0.1", "", {}, "sha512-VqlMdYi59Uch6fnUPxnpijWUQe+TW6zeWCvyr6Mb7JibheHzSuAAoJi2c71ZwIaWKpECpGpYHoaaBp6rBRr+/g=="], - - "module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="], - - "mortice": ["mortice@3.3.1", "", { "dependencies": { "abort-error": "^1.0.0", "it-queue": "^1.1.0", "main-event": "^1.0.0" } }, "sha512-t3oESfijIPGsmsdLEKjF+grHfrbnKSXflJtgb1wY14cjxZpS6GnhHRXTxxzCAoCCnq1YYfpEPwY3gjiCPhOufQ=="], - - "motion": ["motion@12.6.2", "", { "dependencies": { "framer-motion": "^12.6.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-8OBjjuC59WuWHKmPzVWT5M0t5kDxtkfMfHF1M7Iey6F/nvd0AI15YlPnpGlcagW/eOfkdWDO90U/K5LF/k55Yw=="], - - "motion-dom": ["motion-dom@12.6.1", "", { "dependencies": { "motion-utils": "^12.5.0" } }, "sha512-8XVsriTUEVOepoIDgE/LDGdg7qaKXWdt+wQA/8z0p8YzJDLYL8gbimZ3YkCLlj7bB2i/4UBD/g+VO7y9ZY0zHQ=="], - - "motion-utils": ["motion-utils@12.5.0", "", {}, "sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA=="], - - "mqtt": ["mqtt@5.10.4", "", { "dependencies": { "@types/readable-stream": "^4.0.18", "@types/ws": "^8.5.14", "commist": "^3.2.0", "concat-stream": "^2.0.0", "debug": "^4.4.0", "help-me": "^5.0.0", "lru-cache": "^10.4.3", "minimist": "^1.2.8", "mqtt-packet": "^9.0.1", "number-allocator": "^1.0.14", "readable-stream": "^4.7.0", "reinterval": "^1.1.0", "rfdc": "^1.4.1", "split2": "^4.2.0", "worker-timers": "^7.1.8", "ws": "^8.18.0" }, "bin": { "mqtt_pub": "build/bin/pub.js", "mqtt_sub": "build/bin/sub.js", "mqtt": "build/bin/mqtt.js" } }, "sha512-wN+SuhT2/ZaG6NPxca0N6YtRivnMxk6VflxQUEeqDH4erKdj+wPAGhHmcTLzvqfE4sJRxrEJ+XJxUc0No0E7eQ=="], - - "mqtt-packet": ["mqtt-packet@9.0.2", "", { "dependencies": { "bl": "^6.0.8", "debug": "^4.3.4", "process-nextick-args": "^2.0.1" } }, "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA=="], - - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "multiformats": ["multiformats@13.4.1", "", {}, "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q=="], - - "nanoid": ["nanoid@5.1.3", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-zAbEOEr7u2CbxwoMRlz/pNSpRP0FdAU4pRaYunCdEezWohXFs+a0Xw7RfkKaezMsmSM1vttcLthJtwRnVtOfHQ=="], - - "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], - - "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], - - "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], - - "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], - - "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - - "node-abi": ["node-abi@3.74.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w=="], - - "node-bignumber": ["node-bignumber@1.2.2", "", {}, "sha512-VoTZHmdFQpZH1+q1dz2qcHNCwTWsJg2T3PYwlAyDNFOfVhSYUKQBLFcCpCud+wJBGgCttGavZILaIggDIKqEQQ=="], - - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - - "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - - "node-gyp": ["node-gyp@10.3.1", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^13.0.0", "nopt": "^7.0.0", "proc-log": "^4.1.0", "semver": "^7.3.5", "tar": "^6.2.1", "which": "^4.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ=="], - - "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.1.1", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-test": "build-test.js", "node-gyp-build-optional-packages-optional": "optional.js" } }, "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw=="], - - "node-mock-http": ["node-mock-http@1.0.2", "", {}, "sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g=="], - - "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], - - "nopt": ["nopt@7.2.1", "", { "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w=="], - - "normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="], - - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - - "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], - - "npm-bundled": ["npm-bundled@3.0.1", "", { "dependencies": { "npm-normalize-package-bin": "^3.0.0" } }, "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ=="], - - "npm-install-checks": ["npm-install-checks@6.3.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw=="], - - "npm-normalize-package-bin": ["npm-normalize-package-bin@3.0.1", "", {}, "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ=="], - - "npm-package-arg": ["npm-package-arg@11.0.3", "", { "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } }, "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw=="], - - "npm-packlist": ["npm-packlist@8.0.2", "", { "dependencies": { "ignore-walk": "^6.0.4" } }, "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA=="], - - "npm-pick-manifest": ["npm-pick-manifest@9.1.0", "", { "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", "npm-package-arg": "^11.0.0", "semver": "^7.3.5" } }, "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA=="], - - "npm-registry-fetch": ["npm-registry-fetch@17.1.0", "", { "dependencies": { "@npmcli/redact": "^2.0.0", "jsonparse": "^1.3.1", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", "proc-log": "^4.0.0" } }, "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA=="], - - "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - - "nth-check": ["nth-check@1.0.2", "", { "dependencies": { "boolbase": "~1.0.0" } }, "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg=="], - - "number-allocator": ["number-allocator@1.0.14", "", { "dependencies": { "debug": "^4.3.1", "js-sdsl": "4.3.0" } }, "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA=="], - - "oauth-sign": ["oauth-sign@0.9.0", "", {}, "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="], - - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - - "object-hash": ["object-hash@2.2.0", "", {}, "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "object-treeify": ["object-treeify@1.1.33", "", {}, "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A=="], - - "obliterator": ["obliterator@2.0.5", "", {}, "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw=="], - - "ofetch": ["ofetch@1.4.1", "", { "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", "ufo": "^1.5.4" } }, "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw=="], - - "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - - "oidc-token-hash": ["oidc-token-hash@5.1.0", "", {}, "sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA=="], - - "on-change": ["on-change@5.0.1", "", {}, "sha512-n7THCP7RkyReRSLkJb8kUWoNsxUIBxTkIp3JKno+sEz6o/9AJ3w3P9fzQkITEkMwyTKJjZciF3v/pVoouxZZMg=="], - - "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], - - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - - "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - - "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], - - "oniguruma-to-es": ["oniguruma-to-es@4.3.3", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg=="], - - "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], - - "opencontrol": ["opencontrol@0.0.6", "", { "dependencies": { "@modelcontextprotocol/sdk": "1.6.1", "@tsconfig/bun": "1.0.7", "hono": "4.7.4", "zod": "3.24.2", "zod-to-json-schema": "3.24.3" }, "bin": { "opencontrol": "bin/index.mjs" } }, "sha512-QeCrpOK5D15QV8kjnGVeD/BHFLwcVr+sn4T6KKmP0WAMs2pww56e4h+eOGHb5iPOufUQXbdbBKi6WV2kk7tefQ=="], - - "openid-client": ["openid-client@5.6.4", "", { "dependencies": { "jose": "^4.15.4", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", "oidc-token-hash": "^5.0.3" } }, "sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA=="], - - "outdent": ["outdent@0.8.0", "", {}, "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A=="], - - "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], - - "p-defer": ["p-defer@4.0.1", "", {}, "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A=="], - - "p-event": ["p-event@7.0.0", "", { "dependencies": { "p-timeout": "^6.1.4" } }, "sha512-z4Xv/ieHhi6Dx3A5xbZI8WWTn+eSRo6buGTvA8Yv2iLyX+61SUIMKcBszZRHA6e2Apld6QEDSclAuha2iUntyA=="], - - "p-limit": ["p-limit@6.2.0", "", { "dependencies": { "yocto-queue": "^1.1.1" } }, "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA=="], - - "p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], - - "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - - "p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], - - "p-retry": ["p-retry@6.2.1", "", { "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ=="], - - "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - - "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - - "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - - "package-manager-detector": ["package-manager-detector@1.4.1", "", {}, "sha512-dSMiVLBEA4XaNJ0PRb4N5cV/SEP4BWrWZKBmfF+OUm2pQTiZ6DDkKeWaltwu3JRhLoy59ayIkJ00cx9K9CaYTg=="], - - "pacote": ["pacote@18.0.6", "", { "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", "npm-registry-fetch": "^17.0.0", "proc-log": "^4.0.0", "promise-retry": "^2.0.1", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "bin/index.js" } }, "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A=="], - - "pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], - - "parse-conflict-json": ["parse-conflict-json@3.0.1", "", { "dependencies": { "json-parse-even-better-errors": "^3.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" } }, "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw=="], - - "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], - - "parse-prometheus-text-format": ["parse-prometheus-text-format@1.1.1", "", { "dependencies": { "shallow-equal": "^1.2.0" } }, "sha512-dBlhYVACjRdSqLMFe4/Q1l/Gd3UmXm8ruvsTi7J6ul3ih45AkzkVpI5XHV4aZ37juGZW5+3dGU5lwk+QLM9XJA=="], - - "parse-srcset": ["parse-srcset@1.0.2", "", {}, "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="], - - "parse5": ["parse5@7.2.1", "", { "dependencies": { "entities": "^4.5.0" } }, "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ=="], - - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - - "path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], - - "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - - "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - - "path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="], - - "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], - - "permessage-deflate": ["permessage-deflate@0.1.7", "", { "dependencies": { "safe-buffer": "*" } }, "sha512-EUNi/RIsyJ1P1u9QHFwMOUWMYetqlE22ZgGbad7YP856WF4BFF0B7DuNy6vEGsgNNud6c/SkdWzkne71hH8MjA=="], - - "pg": ["pg@8.14.0", "", { "dependencies": { "pg-connection-string": "^2.7.0", "pg-pool": "^3.8.0", "pg-protocol": "^1.8.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, "optionalDependencies": { "pg-cloudflare": "^1.1.1" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-nXbVpyoaXVmdqlKEzToFf37qzyeeh7mbiXsnoWvstSqohj88yaa/I/Rq/HEVn2QPSZEuLIJa/jSpRDyzjEx4FQ=="], - - "pg-cloudflare": ["pg-cloudflare@1.1.1", "", {}, "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q=="], - - "pg-connection-string": ["pg-connection-string@2.7.0", "", {}, "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA=="], - - "pg-format": ["pg-format-fix@1.0.5", "", {}, "sha512-HcXVy9Zk4kn87P0+U9XSxGtenNyknbPB87NreixSBk0lYJy89u+d/zQbS+f/aTTxABQ/B6FH1KdBB5EsGzRS2w=="], - - "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - - "pg-pool": ["pg-pool@3.8.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw=="], - - "pg-protocol": ["pg-protocol@1.8.0", "", {}, "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g=="], - - "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], - - "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "picomatch": ["picomatch@3.0.1", "", {}, "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag=="], - - "pino": ["pino@9.6.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg=="], - - "pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], - - "pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], - - "pixelmatch": ["pixelmatch@7.1.0", "", { "dependencies": { "pngjs": "^7.0.0" }, "bin": { "pixelmatch": "bin/pixelmatch" } }, "sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng=="], - - "pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="], - - "pkg-dir": ["pkg-dir@7.0.0", "", { "dependencies": { "find-up": "^6.3.0" } }, "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA=="], - - "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - - "play-standalone": ["play-standalone@workspace:packages/play-standalone"], - - "pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="], - - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - - "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], - - "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], - - "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "postgres": ["postgres@3.4.5", "", {}, "sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg=="], - - "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], - - "postgres-bytea": ["postgres-bytea@1.0.0", "", {}, "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="], - - "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], - - "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - - "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], - - "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], - - "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], - - "proc-log": ["proc-log@4.2.0", "", {}, "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA=="], - - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], - - "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - - "process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], - - "proggy": ["proggy@2.0.0", "", {}, "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A=="], - - "progress-events": ["progress-events@1.0.1", "", {}, "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw=="], - - "promise-all-reject-late": ["promise-all-reject-late@1.0.1", "", {}, "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw=="], - - "promise-call-limit": ["promise-call-limit@3.0.2", "", {}, "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw=="], - - "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], - - "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], - - "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], - - "property-information": ["property-information@7.0.0", "", {}, "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg=="], - - "protobufjs": ["protobufjs@7.4.0", "", { "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" } }, "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw=="], - - "protons-runtime": ["protons-runtime@5.6.0", "", { "dependencies": { "uint8-varint": "^2.0.2", "uint8arraylist": "^2.4.3", "uint8arrays": "^5.0.1" } }, "sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg=="], - - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - - "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], - - "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], - - "punycode": ["punycode@1.3.2", "", {}, "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="], - - "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], - - "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], - - "qs": ["qs@6.5.3", "", {}, "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="], - - "querystring": ["querystring@0.2.0", "", {}, "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="], - - "queue": ["queue@6.0.1", "", { "dependencies": { "inherits": "~2.0.3" } }, "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg=="], - - "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], - - "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], - - "race-event": ["race-event@1.3.0", "", {}, "sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg=="], - - "race-signal": ["race-signal@1.1.3", "", {}, "sha512-Mt2NznMgepLfORijhQMncE26IhkmjEphig+/1fKC0OtaKwys/gpvpmswSjoN01SS+VO951mj0L4VIDXdXsjnfA=="], - - "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], - - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "raw-body": ["raw-body@3.0.0", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.6.3", "unpipe": "1.0.0" } }, "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g=="], - - "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - - "react": ["react@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ=="], - - "react-dom": ["react-dom@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g=="], - - "read-cmd-shim": ["read-cmd-shim@4.0.0", "", {}, "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q=="], - - "read-package-json-fast": ["read-package-json-fast@3.0.2", "", { "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" } }, "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw=="], - - "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], - - "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - - "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], - - "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], - - "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], - - "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], - - "regex": ["regex@6.0.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA=="], - - "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], - - "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], - - "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], - - "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], - - "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], - - "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], - - "reinterval": ["reinterval@1.1.0", "", {}, "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ=="], - - "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], - - "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], - - "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], - - "remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], - - "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], - - "remeda": ["remeda@2.21.2", "", { "dependencies": { "type-fest": "^4.37.0" } }, "sha512-wdhkMDou8HRpD7RnxKJ/FHJWEGXRH7jV/pb0NsdLLSoBo+G9RjtxcY41hVhogLfEMkThk6aySKjs+Yd6PnpzBA=="], - - "request": ["request@2.88.2", "", { "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="], - - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - - "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - - "require-in-the-middle": ["require-in-the-middle@7.5.2", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ=="], - - "require-like": ["require-like@0.1.2", "", {}, "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A=="], - - "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], - - "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], - - "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], - - "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - - "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], - - "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], - - "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], - - "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], - - "retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], - - "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], - - "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], - - "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], - - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - - "rollup": ["rollup@4.38.0", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.38.0", "@rollup/rollup-android-arm64": "4.38.0", "@rollup/rollup-darwin-arm64": "4.38.0", "@rollup/rollup-darwin-x64": "4.38.0", "@rollup/rollup-freebsd-arm64": "4.38.0", "@rollup/rollup-freebsd-x64": "4.38.0", "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", "@rollup/rollup-linux-arm-musleabihf": "4.38.0", "@rollup/rollup-linux-arm64-gnu": "4.38.0", "@rollup/rollup-linux-arm64-musl": "4.38.0", "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", "@rollup/rollup-linux-riscv64-gnu": "4.38.0", "@rollup/rollup-linux-riscv64-musl": "4.38.0", "@rollup/rollup-linux-s390x-gnu": "4.38.0", "@rollup/rollup-linux-x64-gnu": "4.38.0", "@rollup/rollup-linux-x64-musl": "4.38.0", "@rollup/rollup-win32-arm64-msvc": "4.38.0", "@rollup/rollup-win32-ia32-msvc": "4.38.0", "@rollup/rollup-win32-x64-msvc": "4.38.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw=="], - - "router": ["router@2.1.0", "", { "dependencies": { "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA=="], - - "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - - "safe-regex2": ["safe-regex2@4.0.1", "", { "dependencies": { "ret": "~0.5.0" } }, "sha512-goqsB+bSlOmVX+CiFX2PFc1OV88j5jvBqIM+DgqrucHnUguAUNtiNOs+aTadq2NqsLQ+TQ3UEVG3gtSFcdlkCg=="], - - "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], - - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - - "sanitize-html": ["sanitize-html@2.16.0", "", { "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", "htmlparser2": "^8.0.0", "is-plain-object": "^5.0.0", "parse-srcset": "^1.0.2", "postcss": "^8.3.11" } }, "sha512-0s4caLuHHaZFVxFTG74oW91+j6vW7gKbGD6CD2+miP73CE6z6YtOBN0ArtLd2UGyi4IC7K47v3ENUbQX4jV3Mg=="], - - "sax": ["sax@1.2.1", "", {}, "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="], - - "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], - - "secure-json-parse": ["secure-json-parse@3.0.2", "", {}, "sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w=="], - - "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], - - "send": ["send@1.2.0", "", { "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.0", "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw=="], - - "seroval": ["seroval@1.2.1", "", {}, "sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw=="], - - "seroval-plugins": ["seroval-plugins@1.2.1", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw=="], - - "serve-static": ["serve-static@2.1.0", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.0.0" } }, "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA=="], - - "server-destroy": ["server-destroy@1.0.1", "", {}, "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ=="], - - "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], - - "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], - - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - - "shallow-equal": ["shallow-equal@1.2.1", "", {}, "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="], - - "sharp": ["sharp@0.34.1", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.7.1" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.1", "@img/sharp-darwin-x64": "0.34.1", "@img/sharp-libvips-darwin-arm64": "1.1.0", "@img/sharp-libvips-darwin-x64": "1.1.0", "@img/sharp-libvips-linux-arm": "1.1.0", "@img/sharp-libvips-linux-arm64": "1.1.0", "@img/sharp-libvips-linux-ppc64": "1.1.0", "@img/sharp-libvips-linux-s390x": "1.1.0", "@img/sharp-libvips-linux-x64": "1.1.0", "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", "@img/sharp-libvips-linuxmusl-x64": "1.1.0", "@img/sharp-linux-arm": "0.34.1", "@img/sharp-linux-arm64": "0.34.1", "@img/sharp-linux-s390x": "0.34.1", "@img/sharp-linux-x64": "0.34.1", "@img/sharp-linuxmusl-arm64": "0.34.1", "@img/sharp-linuxmusl-x64": "0.34.1", "@img/sharp-wasm32": "0.34.1", "@img/sharp-win32-ia32": "0.34.1", "@img/sharp-win32-x64": "0.34.1" } }, "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg=="], - - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - - "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="], - - "shiki": ["shiki@3.13.0", "", { "dependencies": { "@shikijs/core": "3.13.0", "@shikijs/engine-javascript": "3.13.0", "@shikijs/engine-oniguruma": "3.13.0", "@shikijs/langs": "3.13.0", "@shikijs/themes": "3.13.0", "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g=="], - - "shimmer": ["shimmer@1.2.1", "", {}, "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="], - - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "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" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - - "sigstore": ["sigstore@2.3.1", "", { "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", "@sigstore/protobuf-specs": "^0.3.2", "@sigstore/sign": "^2.3.2", "@sigstore/tuf": "^2.3.4", "@sigstore/verify": "^1.2.1" } }, "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ=="], - - "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], - - "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], - - "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], - - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], - - "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], - - "smol-toml": ["smol-toml@1.4.2", "", {}, "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g=="], - - "socks": ["socks@2.8.4", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ=="], - - "socks-proxy-agent": ["socks-proxy-agent@7.0.0", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww=="], - - "solid-js": ["solid-js@1.9.5", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "^1.1.0", "seroval-plugins": "^1.1.0" } }, "sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw=="], - - "solid-refresh": ["solid-refresh@0.6.3", "", { "dependencies": { "@babel/generator": "^7.23.6", "@babel/helper-module-imports": "^7.22.15", "@babel/types": "^7.23.6" }, "peerDependencies": { "solid-js": "^1.3" } }, "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA=="], - - "sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], - - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - - "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], - - "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], - - "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], - - "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], - - "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], - - "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="], - - "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], - - "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - - "sshpk": ["sshpk@1.18.0", "", { "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" } }, "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ=="], - - "ssri": ["ssri@10.0.6", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ=="], - - "sst": ["sst@3.17.13", "", { "dependencies": { "aws-sdk": "2.1692.0", "aws4fetch": "1.0.18", "jose": "5.2.3", "opencontrol": "0.0.6", "openid-client": "5.6.4" }, "optionalDependencies": { "sst-darwin-arm64": "3.17.13", "sst-darwin-x64": "3.17.13", "sst-linux-arm64": "3.17.13", "sst-linux-x64": "3.17.13", "sst-linux-x86": "3.17.13", "sst-win32-arm64": "3.17.13", "sst-win32-x64": "3.17.13", "sst-win32-x86": "3.17.13" }, "bin": { "sst": "bin/sst.mjs" } }, "sha512-NaNTZL7uk2AsXzPBySQy7aqXlStXorR+bA785NxvCbskwkc44nVSQcEsvX5tdsD6/jrWpw9tDy4sStv2ycLAng=="], - - "sst-darwin-arm64": ["sst-darwin-arm64@3.17.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HZaDReT/c+2CcEnFkYjMty63II2ckQrUniiSdoEH6eAWyU1Iy7UwKK4I2GYm+5dy9xeSBaOKga6FMdLqFxIiUg=="], - - "sst-darwin-x64": ["sst-darwin-x64@3.17.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-1DlYMrmrI5RY3/Ob039JatgvDKZ5QNtyRkVu0WcnsOvcxFE4dzrCiYKYHg2A+FMDl+H1qcwy2gGA3BTwC9in1w=="], - - "sst-linux-arm64": ["sst-linux-arm64@3.17.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-A4+ZamchUdaX0pqvYWZ+r7OP1bruwEj9qgWT5kU7Q5pqaotIsEitYQi0q9nZFKH+5mXYesUwSy5FA+Q8T3X/Rg=="], - - "sst-linux-x64": ["sst-linux-x64@3.17.13", "", { "os": "linux", "cpu": "x64" }, "sha512-yhKZc5CojqjB2DnyeVka5jeRb4oc3lBx8Qf6or0w4cs47SBIqyvO0iR/3IeKvRRL1hiEUeUF8r/q83rQo9jZMw=="], - - "sst-linux-x86": ["sst-linux-x86@3.17.13", "", { "os": "linux", "cpu": "none" }, "sha512-G1FIUmpUaECB/3CV5EO/y1QmV5mQ8RUkFeZq64oyILEEaMzSWWKz0glHzQ3+p316VE74MzbktiWRqsCKQy8GeA=="], - - "sst-win32-arm64": ["sst-win32-arm64@3.17.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-9uCiIXmsGoxGeNWgM81x/d6V/vecjoiHXhBUPDGlQ1Dct1SbtHAgaf/g2ec5XwSQb9B/tne4qk81eMlTl83Z1A=="], - - "sst-win32-x64": ["sst-win32-x64@3.17.13", "", { "os": "win32", "cpu": "x64" }, "sha512-hTuj4rFSCI/9tX4NMUpNJ69Q9td/giekELDRNv03ys8TpJGoGvPT8D6VD1eX7j1CQnOZIgeEphfW9WmCXkLaIA=="], - - "sst-win32-x86": ["sst-win32-x86@3.17.13", "", { "os": "win32", "cpu": "none" }, "sha512-AuMDGux+H1kPckKJ7Szgi04EpBoOKh/v5zFNAPjvWSkcWcGZ+hsBUx3h/FO/AkGK3RnlLMRj4CQQLoa10RSSIg=="], - - "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], - - "standardwebhooks": ["standardwebhooks@1.0.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg=="], - - "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - - "steam-session": ["steam-session@1.9.3", "", { "dependencies": { "@doctormckay/stdlib": "^2.9.0", "@doctormckay/user-agents": "^1.0.0", "debug": "^4.3.4", "kvparser": "^1.0.1", "node-bignumber": "^1.2.2", "protobufjs": "^7.1.0", "socks-proxy-agent": "^7.0.0", "steamid": "^2.0.0", "tiny-typed-emitter": "^2.1.0", "websocket13": "^4.0.0" } }, "sha512-leunJ8205CpEg/QW98S3LS+18qWHGb6wfe1oh2y4v/EChW0gq7Hd/buKb4R/TVh7VbFvb4taMUbwPvMkNaOPyg=="], - - "steam-totp": ["steam-totp@1.5.0", "", { "dependencies": { "@doctormckay/stats-reporter": "^1.0.0" } }, "sha512-RMlBK5dFtgplDMYYGg/k80RqEntzBcl7C/0RF18fQh9+XPe/iEMsfKmIE+xj8I3hqJW1akANAC6gf+YpfZq52w=="], - - "steamcommunity": ["steamcommunity@3.48.6", "", { "dependencies": { "@doctormckay/user-agents": "^1.0.0", "async": "^2.6.3", "cheerio": "0.22.0", "image-size": "^0.8.2", "request": "^2.88.0", "steam-session": "^1.9.1", "steam-totp": "^1.5.0", "steamid": "^1.1.3", "xml2js": "^0.6.2" } }, "sha512-hl/WTUKpn0Rb5+OrHM2UvXG97EHLnEUqwENyD+aCuln7IsY3NridaPNQJxQHFPrlgI0vWVqw45ibIXhy3XPcjA=="], - - "steamid": ["steamid@2.1.0", "", {}, "sha512-ndt1cvuuSC+i8fcxVsmeyRlgGsR1QsoAuIXz+eabj8/Y4GIWE2+mgHA7Hys61JDHOxttfWtXHtN2m5TNYTlORg=="], - - "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], - - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - - "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - - "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - - "strnum": ["strnum@1.1.2", "", {}, "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA=="], - - "supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], - - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - - "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], - - "table-layout": ["table-layout@4.1.1", "", { "dependencies": { "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" } }, "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA=="], - - "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], - - "tar-fs": ["tar-fs@2.1.2", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA=="], - - "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], - - "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], - - "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], - - "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], - - "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], - - "tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], - - "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], - - "tmp": ["tmp@0.2.3", "", {}, "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w=="], - - "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], - - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - - "tough-cookie": ["tough-cookie@2.5.0", "", { "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="], - - "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - - "treeverse": ["treeverse@3.0.0", "", {}, "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ=="], - - "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], - - "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - - "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], - - "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], - - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], - - "tuf-js": ["tuf-js@2.2.1", "", { "dependencies": { "@tufjs/models": "2.0.1", "debug": "^4.3.4", "make-fetch-happen": "^13.0.1" } }, "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA=="], - - "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - - "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], - - "type-fest": ["type-fest@4.37.0", "", {}, "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg=="], - - "type-is": ["type-is@2.0.0", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw=="], - - "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], - - "typedoc": ["typedoc@0.28.4", "", { "dependencies": { "@gerrit0/mini-shiki": "^3.2.2", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", "yaml": "^2.7.1" }, "peerDependencies": { "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x" }, "bin": { "typedoc": "bin/typedoc" } }, "sha512-xKvKpIywE1rnqqLgjkoq0F3wOqYaKO9nV6YkkSat6IxOWacUCc/7Es0hR3OPmkIqkPoEn7U3x+sYdG72rstZQA=="], - - "typedoc-plugin-markdown": ["typedoc-plugin-markdown@4.6.3", "", { "peerDependencies": { "typedoc": "0.28.x" } }, "sha512-86oODyM2zajXwLs4Wok2mwVEfCwCnp756QyhLGX2IfsdRYr1DXLCgJgnLndaMUjJD7FBhnLk2okbNE9PdLxYRw=="], - - "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], - - "typical": ["typical@7.3.0", "", {}, "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw=="], - - "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], - - "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], - - "uint8-varint": ["uint8-varint@2.0.4", "", { "dependencies": { "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" } }, "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw=="], - - "uint8arraylist": ["uint8arraylist@2.4.8", "", { "dependencies": { "uint8arrays": "^5.0.1" } }, "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ=="], - - "uint8arrays": ["uint8arrays@5.1.0", "", { "dependencies": { "multiformats": "^13.0.0" } }, "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww=="], - - "ulid": ["ulid@2.3.0", "", { "bin": { "ulid": "./bin/cli.js" } }, "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw=="], - - "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], - - "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - - "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - - "unicode-properties": ["unicode-properties@1.4.1", "", { "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg=="], - - "unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="], - - "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - - "unifont": ["unifont@0.6.0", "", { "dependencies": { "css-tree": "^3.0.0", "ofetch": "^1.4.1", "ohash": "^2.0.0" } }, "sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA=="], - - "unique-filename": ["unique-filename@3.0.0", "", { "dependencies": { "unique-slug": "^4.0.0" } }, "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g=="], - - "unique-slug": ["unique-slug@4.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ=="], - - "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], - - "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], - - "unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], - - "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], - - "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], - - "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], - - "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - - "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], - - "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], - - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - - "unstorage": ["unstorage@1.17.0", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-l9Z7lBiwtNp8ZmcoZ/dmPkFXFdtEdZtTZafCSnEIj3YvtkXeGAtL2rN8MQFy/0cs4eOLpuRJMp9ivdug7TCvww=="], - - "upath": ["upath@1.2.0", "", {}, "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="], - - "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], - - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - - "url": ["url@0.10.3", "", { "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ=="], - - "url-pattern": ["url-pattern@1.0.3", "", {}, "sha512-uQcEj/2puA4aq1R3A2+VNVBgaWYR24FdWjl7VNW83rnWftlhyzOZ/tBjezRiC2UkIzuxC8Top3IekN3vUf1WxA=="], - - "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], - - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - - "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - - "uuid": ["uuid@8.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="], - - "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], - - "valibot": ["valibot@1.1.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw=="], - - "validate-html-nesting": ["validate-html-nesting@1.2.2", "", {}, "sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg=="], - - "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], - - "validate-npm-package-name": ["validate-npm-package-name@5.0.1", "", {}, "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ=="], - - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - - "verror": ["verror@1.10.0", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw=="], - - "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - - "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], - - "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], - - "vite": ["vite@6.1.6", "", { "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.5.2", "rollup": "^4.30.1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-u+jokLMwHVFUoUkfL+m/1hzucejL2639g9QXcrRdtN3WPHfW7imI83V96Oh1R0xVZqDjvcgp+7S8bSQpdVlmPA=="], - - "vite-node": ["vite-node@1.6.1", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA=="], - - "vite-plugin-solid": ["vite-plugin-solid@2.11.6", "", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "peerDependencies": { "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", "solid-js": "^1.7.2", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-Sl5CTqJTGyEeOsmdH6BOgalIZlwH3t4/y0RQuFLMGnvWMBvxb4+lq7x3BSiAw6etf0QexfNJW7HSOO/Qf7pigg=="], - - "vitefu": ["vitefu@1.0.6", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["vite"] }, "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA=="], - - "walk-up-path": ["walk-up-path@3.0.1", "", {}, "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA=="], - - "weald": ["weald@1.0.6", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^10.0.0" } }, "sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ=="], - - "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - - "websocket-extensions": ["websocket-extensions@0.1.4", "", {}, "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="], - - "websocket13": ["websocket13@4.0.0", "", { "dependencies": { "@doctormckay/stdlib": "^2.7.1", "bytebuffer": "^5.0.1", "permessage-deflate": "^0.1.7", "tiny-typed-emitter": "^2.1.0", "websocket-extensions": "^0.1.4" } }, "sha512-/ujP9ZfihyAZIXKGxcYpoe7Gj4r5o3WYSfP93o9lVNhhqoBtYba4m1s3mxdjKZu/HOhX5Mcqrt89dv/gC3b06A=="], - - "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - - "wherearewe": ["wherearewe@2.0.1", "", { "dependencies": { "is-electron": "^2.2.0" } }, "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw=="], - - "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], - - "which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="], - - "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], - - "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], - - "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], - - "wordwrapjs": ["wordwrapjs@5.1.0", "", {}, "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg=="], - - "worker-timers": ["worker-timers@7.1.8", "", { "dependencies": { "@babel/runtime": "^7.24.5", "tslib": "^2.6.2", "worker-timers-broker": "^6.1.8", "worker-timers-worker": "^7.0.71" } }, "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw=="], - - "worker-timers-broker": ["worker-timers-broker@6.1.8", "", { "dependencies": { "@babel/runtime": "^7.24.5", "fast-unique-numbers": "^8.0.13", "tslib": "^2.6.2", "worker-timers-worker": "^7.0.71" } }, "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ=="], - - "worker-timers-worker": ["worker-timers-worker@7.0.71", "", { "dependencies": { "@babel/runtime": "^7.24.5", "tslib": "^2.6.2" } }, "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ=="], - - "wrap-ansi": ["wrap-ansi@9.0.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q=="], - - "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - - "write-file-atomic": ["write-file-atomic@5.0.1", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], - - "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], - - "xml2js": ["xml2js@0.6.2", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA=="], - - "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - - "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], - - "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], - - "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "yaml": ["yaml@2.7.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="], - - "yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], - - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], - - "yocto-queue": ["yocto-queue@1.2.0", "", {}, "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw=="], - - "yocto-spinner": ["yocto-spinner@0.2.3", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ=="], - - "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], - - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "zod-openapi": ["zod-openapi@4.2.3", "", { "peerDependencies": { "zod": "^3.21.4" } }, "sha512-i0SqpcdXfsvVWTIY1Jl3Tk421s9fBIkpXvaA86zDas+8FjfZjm+GX6ot6SPB2SyuHwUNTN02gE5uIVlYXlyrDQ=="], - - "zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], - - "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], - - "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - - "@actor-core/bun/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], - - "@actor-core/memory/hono": ["hono@4.7.4", "", {}, "sha512-Pst8FuGqz3L7tFF+u9Pu70eI0xa5S3LPUmrNd5Jm8nTHze9FxLTK9Kaj5g/k4UcwuJSXTP65SyHOPLrffpcAJg=="], - - "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - - "@apidevtools/json-schema-ref-parser/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - - "@astrojs/markdown-remark/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - - "@astrojs/telemetry/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], - - "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-crypto/sha1-browser/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-crypto/sha1-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - - "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], - - "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - - "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], - - "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], - - "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - - "@aws-sdk/client-lambda/@aws-sdk/core": ["@aws-sdk/core@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/core": "^3.5.1", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/util-middleware": "^4.0.4", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-8eB3wKbmfciQFmxFq7hAjy7mXdUs7vBOR5SwT0ZtQBg0Txc18Lc9tMViqqdO6/KU7OukA6ib2IAVSjIJJEN7FQ=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.821.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.821.0", "@aws-sdk/credential-provider-http": "3.821.0", "@aws-sdk/credential-provider-ini": "3.821.0", "@aws-sdk/credential-provider-process": "3.821.0", "@aws-sdk/credential-provider-sso": "3.821.0", "@aws-sdk/credential-provider-web-identity": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-oBgbcgOXWMgknAfhIdTeHSSVIv+k2LXN9oTbxu1r++o4WWBWrEQ8mHU0Zo9dfr7Uaoqi3pezYZznsBkXnMLEOg=="], - - "@aws-sdk/client-lambda/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw=="], - - "@aws-sdk/client-lambda/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA=="], - - "@aws-sdk/client-lambda/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg=="], - - "@aws-sdk/client-lambda/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.821.0", "@smithy/core": "^3.5.1", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-rw8q3TxygMg3VrofN04QyWVCCyGwz3bVthYmBZZseENPWG3Krz1OCKcyqjkTcAxMQlEywOske+GIiOasGKnJ3w=="], - - "@aws-sdk/client-lambda/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" } }, "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw=="], - - "@aws-sdk/client-lambda/@aws-sdk/types": ["@aws-sdk/types@3.821.0", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA=="], - - "@aws-sdk/client-lambda/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" } }, "sha512-Uknt/zUZnLE76zaAAPEayOeF5/4IZ2puTFXvcSCWHsi9m3tqbb9UozlnlVqvCZLCRWfQryZQoG2W4XSS3qgk5A=="], - - "@aws-sdk/client-lambda/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.821.0", "", { "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw=="], - - "@aws-sdk/client-lambda/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.821.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-YwMXc9EvuzJgnLBTyiQly2juPujXwDgcMHB0iSN92tHe7Dd1jJ1feBmTgdClaaqCeHFUaFpw+3JU/ZUJ6LjR+A=="], - - "@aws-sdk/client-lambda/@smithy/config-resolver": ["@smithy/config-resolver@4.1.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" } }, "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w=="], - - "@aws-sdk/client-lambda/@smithy/core": ["@smithy/core@3.5.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.8", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", "@smithy/util-stream": "^4.2.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-xSw7bZEFKwOKrm/iv8e2BLt2ur98YZdrRD6nII8ditQeUsY2Q1JmIQ0rpILOhaLKYxxG2ivnoOpokzr9qLyDWA=="], - - "@aws-sdk/client-lambda/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.0.4", "", { "dependencies": { "@smithy/protocol-http": "^5.1.2", "@smithy/querystring-builder": "^4.0.4", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw=="], - - "@aws-sdk/client-lambda/@smithy/hash-node": ["@smithy/hash-node@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ=="], - - "@aws-sdk/client-lambda/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw=="], - - "@aws-sdk/client-lambda/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.0.4", "", { "dependencies": { "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w=="], - - "@aws-sdk/client-lambda/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.9", "", { "dependencies": { "@smithy/core": "^3.5.1", "@smithy/middleware-serde": "^4.0.8", "@smithy/node-config-provider": "^4.1.3", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" } }, "sha512-AjDgX4UjORLltD/LZCBQTwjQqEfyrx/GeDTHcYLzIgf87pIT70tMWnN87NQpJru1K4ITirY2htSOxNECZJCBOg=="], - - "@aws-sdk/client-lambda/@smithy/middleware-retry": ["@smithy/middleware-retry@4.1.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/protocol-http": "^5.1.2", "@smithy/service-error-classification": "^4.0.5", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.5", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-RyhcA3sZIIvAo6r48b2Nx2qfg0OnyohlaV0fw415xrQyx5HQ2bvHl9vs/WBiDXIP49mCfws5wX4308c9Pi/isw=="], - - "@aws-sdk/client-lambda/@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.8", "", { "dependencies": { "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw=="], - - "@aws-sdk/client-lambda/@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA=="], - - "@aws-sdk/client-lambda/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.3", "", { "dependencies": { "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw=="], - - "@aws-sdk/client-lambda/@smithy/node-http-handler": ["@smithy/node-http-handler@4.0.6", "", { "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/querystring-builder": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA=="], - - "@aws-sdk/client-lambda/@smithy/protocol-http": ["@smithy/protocol-http@5.1.2", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ=="], - - "@aws-sdk/client-lambda/@smithy/smithy-client": ["@smithy/smithy-client@4.4.1", "", { "dependencies": { "@smithy/core": "^3.5.1", "@smithy/middleware-endpoint": "^4.1.9", "@smithy/middleware-stack": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XPbcHRfd0iwx8dY5XCBCGyI7uweMW0oezYezxXcG8ANgvZ5YPuC6Ylh+n0bTHpdU3SCMZOnhzgVklYz+p3fIhw=="], - - "@aws-sdk/client-lambda/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@aws-sdk/client-lambda/@smithy/url-parser": ["@smithy/url-parser@4.0.4", "", { "dependencies": { "@smithy/querystring-parser": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ=="], - - "@aws-sdk/client-lambda/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.17", "", { "dependencies": { "@smithy/property-provider": "^4.0.4", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-HXq5181qnXmIwB7VrwqwP8rsJybHMoYuJnNoXy4PROs2pfSI4sWDMASF2i+7Lo+u64Y6xowhegcdxczowgJtZg=="], - - "@aws-sdk/client-lambda/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.17", "", { "dependencies": { "@smithy/config-resolver": "^4.1.4", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-RfU2A5LjFhEHw4Nwl1GZNitK4AUWu5jGtigAUDoQtfDUvYHpQxcuLw2QGAdKDtKRflIiHSZ8wXBDR36H9R2Ang=="], - - "@aws-sdk/client-lambda/@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.6", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA=="], - - "@aws-sdk/client-lambda/@smithy/util-middleware": ["@smithy/util-middleware@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ=="], - - "@aws-sdk/client-lambda/@smithy/util-retry": ["@smithy/util-retry@4.0.5", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.5", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-V7MSjVDTlEt/plmOFBn1762Dyu5uqMrV2Pl2X0dYk4XvWfdWJNe9Bs5Bzb56wkCuiWjSfClVMGcsuKrGj7S/yg=="], - - "@aws-sdk/client-lambda/@smithy/util-stream": ["@smithy/util-stream@4.2.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w=="], - - "@aws-sdk/client-rds-data/@aws-sdk/core": ["@aws-sdk/core@3.758.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/core": "^3.1.5", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.758.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.758.0", "@aws-sdk/credential-provider-http": "3.758.0", "@aws-sdk/credential-provider-ini": "3.758.0", "@aws-sdk/credential-provider-process": "3.758.0", "@aws-sdk/credential-provider-sso": "3.758.0", "@aws-sdk/credential-provider-web-identity": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ=="], - - "@aws-sdk/client-rds-data/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w=="], - - "@aws-sdk/client-rds-data/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA=="], - - "@aws-sdk/client-rds-data/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@smithy/core": "^3.1.5", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg=="], - - "@aws-sdk/client-rds-data/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ=="], - - "@aws-sdk/client-rds-data/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], - - "@aws-sdk/client-rds-data/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.743.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "@smithy/util-endpoints": "^3.0.1", "tslib": "^2.6.2" } }, "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng=="], - - "@aws-sdk/client-rds-data/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.758.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw=="], - - "@aws-sdk/client-rds-data/@smithy/config-resolver": ["@smithy/config-resolver@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ=="], - - "@aws-sdk/client-rds-data/@smithy/core": ["@smithy/core@3.1.5", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.1.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA=="], - - "@aws-sdk/client-rds-data/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.0.1", "", { "dependencies": { "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA=="], - - "@aws-sdk/client-rds-data/@smithy/hash-node": ["@smithy/hash-node@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w=="], - - "@aws-sdk/client-rds-data/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.0.1", "", { "dependencies": { "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.0.6", "", { "dependencies": { "@smithy/core": "^3.1.5", "@smithy/middleware-serde": "^4.0.2", "@smithy/node-config-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-retry": ["@smithy/middleware-retry@4.0.7", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/service-error-classification": "^4.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.2", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA=="], - - "@aws-sdk/client-rds-data/@smithy/node-config-provider": ["@smithy/node-config-provider@4.0.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ=="], - - "@aws-sdk/client-rds-data/@smithy/node-http-handler": ["@smithy/node-http-handler@4.0.3", "", { "dependencies": { "@smithy/abort-controller": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA=="], - - "@aws-sdk/client-rds-data/@smithy/protocol-http": ["@smithy/protocol-http@5.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ=="], - - "@aws-sdk/client-rds-data/@smithy/smithy-client": ["@smithy/smithy-client@4.1.6", "", { "dependencies": { "@smithy/core": "^3.1.5", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-stack": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" } }, "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw=="], - - "@aws-sdk/client-rds-data/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], - - "@aws-sdk/client-rds-data/@smithy/url-parser": ["@smithy/url-parser@4.0.1", "", { "dependencies": { "@smithy/querystring-parser": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g=="], - - "@aws-sdk/client-rds-data/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.7", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q=="], - - "@aws-sdk/client-rds-data/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.7", "", { "dependencies": { "@smithy/config-resolver": "^4.0.1", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ=="], - - "@aws-sdk/client-rds-data/@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA=="], - - "@aws-sdk/client-rds-data/@smithy/util-middleware": ["@smithy/util-middleware@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA=="], - - "@aws-sdk/client-rds-data/@smithy/util-retry": ["@smithy/util-retry@4.0.1", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw=="], - - "@aws-sdk/client-s3/@aws-sdk/core": ["@aws-sdk/core@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/core": "^3.3.1", "@smithy/node-config-provider": "^4.1.0", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-HJRINPncdjPK0iL3f6cBpqCMaxVwq2oDbRCzOx04tsLZ0tNgRACBfT3d/zNVRvMt6fnOVKXoN1LAtQaw50pjEA=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.806.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.806.0", "@aws-sdk/credential-provider-http": "3.806.0", "@aws-sdk/credential-provider-ini": "3.806.0", "@aws-sdk/credential-provider-process": "3.806.0", "@aws-sdk/credential-provider-sso": "3.806.0", "@aws-sdk/credential-provider-web-identity": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-fZX8xP2Kf0k70kDTog/87fh/M+CV0E2yujSw1cUBJhDSwDX3RlUahiJk7TpB/KGw6hEFESMd6+7kq3UzYuw3rg=="], - - "@aws-sdk/client-s3/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ=="], - - "@aws-sdk/client-s3/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA=="], - - "@aws-sdk/client-s3/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw=="], - - "@aws-sdk/client-s3/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@smithy/core": "^3.3.1", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-XoIromVffgXnc+/mjlR2EVzQVIei3bPVtafIZNsHuEmUvIWJXiWsa2eJpt3BUqa0HF9YPknK7ommNEhqRb8ucg=="], - - "@aws-sdk/client-s3/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/node-config-provider": "^4.1.0", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-cuv5pX55JOlzKC/iLsB5nZ9eUyVgncim3VhhWHZA/KYPh7rLMjOEfZ+xyaE9uLJXGmzOJboFH7+YdTRdIcOgrg=="], - - "@aws-sdk/client-s3/@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.806.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-IrbEnpKvG8d9rUWAvsF28g8qBlQ02FaOxn4cGXtTs0b0BGMK1M+cGQrYjJ7Ak08kIXDxBqsdIlZGsKYr+Ds9+w=="], - - "@aws-sdk/client-s3/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/client-s3/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "@smithy/util-endpoints": "^3.0.3", "tslib": "^2.6.2" } }, "sha512-3YRRgZ+qFuWDdm5uAbxKsr65UAil4KkrFKua9f4m7Be3v24ETiFOOqhanFUIk9/WOtvzF7oFEiDjYKDGlwV2xg=="], - - "@aws-sdk/client-s3/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A=="], - - "@aws-sdk/client-s3/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.806.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/node-config-provider": "^4.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Az2e4/gmPZ4BpB7QRj7U76I+fctXhNcxlcgsaHnMhvt+R30nvzM2EhsyBUvsWl8+r9bnLeYt9BpvEZeq2ANDzA=="], - - "@aws-sdk/client-s3/@smithy/config-resolver": ["@smithy/config-resolver@4.1.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A=="], - - "@aws-sdk/client-s3/@smithy/core": ["@smithy/core@3.3.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.0.2", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.1.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.0.2", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw=="], - - "@aws-sdk/client-s3/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-serde": "^4.0.3", "@smithy/node-config-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g=="], - - "@aws-sdk/client-s3/@smithy/middleware-retry": ["@smithy/middleware-retry@4.1.5", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/protocol-http": "^5.1.0", "@smithy/service-error-classification": "^4.0.3", "@smithy/smithy-client": "^4.2.4", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-eQguCTA2TRGyg4P7gDuhRjL2HtN5OKJXysq3Ufj0EppZe4XBmSyKIvVX9ws9KkD3lkJskw1tfE96wMFsiUShaw=="], - - "@aws-sdk/client-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw=="], - - "@aws-sdk/client-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.2.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-endpoint": "^4.1.4", "@smithy/middleware-stack": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q=="], - - "@aws-sdk/client-s3/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.12", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/smithy-client": "^4.2.4", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-0vPKiC+rXWMq397tsa/RFcO/kJ1UsibgNCXScMsRwzm9WMT4QjGf43zVPWZ5hPLu3z/1XddiZFIlKcu2j/yUuQ=="], - - "@aws-sdk/client-s3/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.12", "", { "dependencies": { "@smithy/config-resolver": "^4.1.2", "@smithy/credential-provider-imds": "^4.0.4", "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/smithy-client": "^4.2.4", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zCx9noceM3Pw2jvcJ3w3RbvKnPe3lCo6txH9ksZj6CeRZPkvRZPLXmKVSOvDr9QQP3VRq/WnBLd+LTZAL7+0IQ=="], - - "@aws-sdk/client-s3/@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg=="], - - "@aws-sdk/client-s3/@smithy/util-retry": ["@smithy/util-retry@4.0.3", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.3", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng=="], - - "@aws-sdk/client-s3/@smithy/util-waiter": ["@smithy/util-waiter@4.0.3", "", { "dependencies": { "@smithy/abort-controller": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA=="], - - "@aws-sdk/client-sesv2/@aws-sdk/core": ["@aws-sdk/core@3.758.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/core": "^3.1.5", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.758.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.758.0", "@aws-sdk/credential-provider-http": "3.758.0", "@aws-sdk/credential-provider-ini": "3.758.0", "@aws-sdk/credential-provider-process": "3.758.0", "@aws-sdk/credential-provider-sso": "3.758.0", "@aws-sdk/credential-provider-web-identity": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw=="], - - "@aws-sdk/client-sesv2/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w=="], - - "@aws-sdk/client-sesv2/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA=="], - - "@aws-sdk/client-sesv2/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@smithy/core": "^3.1.5", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg=="], - - "@aws-sdk/client-sesv2/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], - - "@aws-sdk/client-sesv2/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.743.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "@smithy/util-endpoints": "^3.0.1", "tslib": "^2.6.2" } }, "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw=="], - - "@aws-sdk/client-sesv2/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng=="], - - "@aws-sdk/client-sesv2/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.758.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw=="], - - "@aws-sdk/client-sesv2/@smithy/config-resolver": ["@smithy/config-resolver@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ=="], - - "@aws-sdk/client-sesv2/@smithy/core": ["@smithy/core@3.1.5", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.1.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA=="], - - "@aws-sdk/client-sesv2/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.0.1", "", { "dependencies": { "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA=="], - - "@aws-sdk/client-sesv2/@smithy/hash-node": ["@smithy/hash-node@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w=="], - - "@aws-sdk/client-sesv2/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.0.1", "", { "dependencies": { "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.0.6", "", { "dependencies": { "@smithy/core": "^3.1.5", "@smithy/middleware-serde": "^4.0.2", "@smithy/node-config-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-retry": ["@smithy/middleware-retry@4.0.7", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/service-error-classification": "^4.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.2", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA=="], - - "@aws-sdk/client-sesv2/@smithy/node-config-provider": ["@smithy/node-config-provider@4.0.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ=="], - - "@aws-sdk/client-sesv2/@smithy/node-http-handler": ["@smithy/node-http-handler@4.0.3", "", { "dependencies": { "@smithy/abort-controller": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA=="], - - "@aws-sdk/client-sesv2/@smithy/protocol-http": ["@smithy/protocol-http@5.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ=="], - - "@aws-sdk/client-sesv2/@smithy/smithy-client": ["@smithy/smithy-client@4.1.6", "", { "dependencies": { "@smithy/core": "^3.1.5", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-stack": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" } }, "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw=="], - - "@aws-sdk/client-sesv2/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], - - "@aws-sdk/client-sesv2/@smithy/url-parser": ["@smithy/url-parser@4.0.1", "", { "dependencies": { "@smithy/querystring-parser": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g=="], - - "@aws-sdk/client-sesv2/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.7", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q=="], - - "@aws-sdk/client-sesv2/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.7", "", { "dependencies": { "@smithy/config-resolver": "^4.0.1", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ=="], - - "@aws-sdk/client-sesv2/@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA=="], - - "@aws-sdk/client-sesv2/@smithy/util-middleware": ["@smithy/util-middleware@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA=="], - - "@aws-sdk/client-sesv2/@smithy/util-retry": ["@smithy/util-retry@4.0.1", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw=="], - - "@aws-sdk/client-sqs/@aws-sdk/core": ["@aws-sdk/core@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/core": "^3.3.1", "@smithy/node-config-provider": "^4.1.0", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-HJRINPncdjPK0iL3f6cBpqCMaxVwq2oDbRCzOx04tsLZ0tNgRACBfT3d/zNVRvMt6fnOVKXoN1LAtQaw50pjEA=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.806.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.806.0", "@aws-sdk/credential-provider-http": "3.806.0", "@aws-sdk/credential-provider-ini": "3.806.0", "@aws-sdk/credential-provider-process": "3.806.0", "@aws-sdk/credential-provider-sso": "3.806.0", "@aws-sdk/credential-provider-web-identity": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-fZX8xP2Kf0k70kDTog/87fh/M+CV0E2yujSw1cUBJhDSwDX3RlUahiJk7TpB/KGw6hEFESMd6+7kq3UzYuw3rg=="], - - "@aws-sdk/client-sqs/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ=="], - - "@aws-sdk/client-sqs/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA=="], - - "@aws-sdk/client-sqs/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw=="], - - "@aws-sdk/client-sqs/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@smithy/core": "^3.3.1", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-XoIromVffgXnc+/mjlR2EVzQVIei3bPVtafIZNsHuEmUvIWJXiWsa2eJpt3BUqa0HF9YPknK7ommNEhqRb8ucg=="], - - "@aws-sdk/client-sqs/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/node-config-provider": "^4.1.0", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-cuv5pX55JOlzKC/iLsB5nZ9eUyVgncim3VhhWHZA/KYPh7rLMjOEfZ+xyaE9uLJXGmzOJboFH7+YdTRdIcOgrg=="], - - "@aws-sdk/client-sqs/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/client-sqs/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "@smithy/util-endpoints": "^3.0.3", "tslib": "^2.6.2" } }, "sha512-3YRRgZ+qFuWDdm5uAbxKsr65UAil4KkrFKua9f4m7Be3v24ETiFOOqhanFUIk9/WOtvzF7oFEiDjYKDGlwV2xg=="], - - "@aws-sdk/client-sqs/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.804.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A=="], - - "@aws-sdk/client-sqs/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.806.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/node-config-provider": "^4.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Az2e4/gmPZ4BpB7QRj7U76I+fctXhNcxlcgsaHnMhvt+R30nvzM2EhsyBUvsWl8+r9bnLeYt9BpvEZeq2ANDzA=="], - - "@aws-sdk/client-sqs/@smithy/config-resolver": ["@smithy/config-resolver@4.1.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A=="], - - "@aws-sdk/client-sqs/@smithy/core": ["@smithy/core@3.3.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ=="], - - "@aws-sdk/client-sqs/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-serde": "^4.0.3", "@smithy/node-config-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g=="], - - "@aws-sdk/client-sqs/@smithy/middleware-retry": ["@smithy/middleware-retry@4.1.5", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/protocol-http": "^5.1.0", "@smithy/service-error-classification": "^4.0.3", "@smithy/smithy-client": "^4.2.4", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-eQguCTA2TRGyg4P7gDuhRjL2HtN5OKJXysq3Ufj0EppZe4XBmSyKIvVX9ws9KkD3lkJskw1tfE96wMFsiUShaw=="], - - "@aws-sdk/client-sqs/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw=="], - - "@aws-sdk/client-sqs/@smithy/smithy-client": ["@smithy/smithy-client@4.2.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-endpoint": "^4.1.4", "@smithy/middleware-stack": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q=="], - - "@aws-sdk/client-sqs/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.12", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/smithy-client": "^4.2.4", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-0vPKiC+rXWMq397tsa/RFcO/kJ1UsibgNCXScMsRwzm9WMT4QjGf43zVPWZ5hPLu3z/1XddiZFIlKcu2j/yUuQ=="], - - "@aws-sdk/client-sqs/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.12", "", { "dependencies": { "@smithy/config-resolver": "^4.1.2", "@smithy/credential-provider-imds": "^4.0.4", "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/smithy-client": "^4.2.4", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zCx9noceM3Pw2jvcJ3w3RbvKnPe3lCo6txH9ksZj6CeRZPkvRZPLXmKVSOvDr9QQP3VRq/WnBLd+LTZAL7+0IQ=="], - - "@aws-sdk/client-sqs/@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg=="], - - "@aws-sdk/client-sqs/@smithy/util-retry": ["@smithy/util-retry@4.0.3", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.3", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng=="], - - "@aws-sdk/middleware-bucket-endpoint/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw=="], - - "@aws-sdk/middleware-expect-continue/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/core": ["@aws-sdk/core@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/core": "^3.3.1", "@smithy/node-config-provider": "^4.1.0", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-HJRINPncdjPK0iL3f6cBpqCMaxVwq2oDbRCzOx04tsLZ0tNgRACBfT3d/zNVRvMt6fnOVKXoN1LAtQaw50pjEA=="], - - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw=="], - - "@aws-sdk/middleware-location-constraint/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/middleware-sdk-s3/@aws-sdk/core": ["@aws-sdk/core@3.806.0", "", { "dependencies": { "@aws-sdk/types": "3.804.0", "@smithy/core": "^3.3.1", "@smithy/node-config-provider": "^4.1.0", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/signature-v4": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-HJRINPncdjPK0iL3f6cBpqCMaxVwq2oDbRCzOx04tsLZ0tNgRACBfT3d/zNVRvMt6fnOVKXoN1LAtQaw50pjEA=="], - - "@aws-sdk/middleware-sdk-s3/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/middleware-sdk-s3/@smithy/core": ["@smithy/core@3.3.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ=="], - - "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw=="], - - "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4": ["@smithy/signature-v4@5.1.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w=="], - - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.2.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-endpoint": "^4.1.4", "@smithy/middleware-stack": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q=="], - - "@aws-sdk/middleware-sdk-sqs/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/middleware-sdk-sqs/@smithy/smithy-client": ["@smithy/smithy-client@4.2.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-endpoint": "^4.1.4", "@smithy/middleware-stack": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q=="], - - "@aws-sdk/middleware-ssec/@aws-sdk/types": ["@aws-sdk/types@3.804.0", "", { "dependencies": { "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-arn-parser": "3.723.0", "@smithy/core": "^3.1.5", "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.1.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], - - "@aws-sdk/signature-v4-multi-region/@smithy/protocol-http": ["@smithy/protocol-http@5.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ=="], - - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4": ["@smithy/signature-v4@5.0.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA=="], - - "@aws-sdk/signature-v4-multi-region/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], - - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - - "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - - "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@bufbuild/protoplugin/typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], - - "@chainsafe/libp2p-quic/@libp2p/interface": ["@libp2p/interface@2.11.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^12.4.4", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "multiformats": "^13.3.6", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-0MUFKoXWHTQW3oWIgSHApmYMUKWO/Y02+7Hpyp+n3z+geD4Xo2Rku2gYWmxcq+Pyjkz6Q9YjDWz3Yb2SoV2E8Q=="], - - "@chainsafe/libp2p-quic/@libp2p/utils": ["@libp2p/utils@6.7.2", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.8", "@libp2p/interface": "^2.11.0", "@libp2p/logger": "^5.2.0", "@multiformats/multiaddr": "^12.4.4", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "delay": "^6.0.0", "get-iterator": "^2.0.1", "is-loopback-addr": "^2.0.2", "is-plain-obj": "^4.1.0", "it-foreach": "^2.1.3", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "race-event": "^1.3.0", "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-yglVPcYErb4al3MMTdedVLLsdUvr5KaqrrxohxTl/FXMFBvBs0o3w8lo29nfnTUpnNSHFhWZ9at0ZGNnpT/C/w=="], - - "@chainsafe/libp2p-quic/@multiformats/multiaddr": ["@multiformats/multiaddr@12.5.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@multiformats/dns": "^1.0.3", "abort-error": "^1.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ=="], - - "@chainsafe/libp2p-yamux/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], - - "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], - - "@dotenvx/dotenvx/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - - "@ecies/ciphers/@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], - - "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], - - "@fastify/ajv-compiler/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "@fastify/websocket/ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], - - "@gerrit0/mini-shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.4.0", "", { "dependencies": { "@shikijs/types": "3.4.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-zwcWlZ4OQuJ/+1t32ClTtyTU1AiDkK1lhtviRWoq/hFqPjCNyLj22bIg9rB7BfoZKOEOfrsGz7No33BPCf+WlQ=="], - - "@gerrit0/mini-shiki/@shikijs/langs": ["@shikijs/langs@3.4.0", "", { "dependencies": { "@shikijs/types": "3.4.0" } }, "sha512-bQkR+8LllaM2duU9BBRQU0GqFTx7TuF5kKlw/7uiGKoK140n1xlLAwCgXwSxAjJ7Htk9tXTFwnnsJTCU5nDPXQ=="], - - "@gerrit0/mini-shiki/@shikijs/themes": ["@shikijs/themes@3.4.0", "", { "dependencies": { "@shikijs/types": "3.4.0" } }, "sha512-YPP4PKNFcFGLxItpbU0ZW1Osyuk8AyZ24YEFaq04CFsuCbcqydMvMUTi40V2dkc0qs1U2uZFrnU6s5zI6IH+uA=="], - - "@gerrit0/mini-shiki/@shikijs/types": ["@shikijs/types@3.4.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-EUT/0lGiE//7j5N/yTMNMT3eCWNcHJLrRKxT0NDXWIfdfSmFJKfPX7nMmRBrQnWboAzIsUziCThrYMMhjbMS1A=="], - - "@grpc/proto-loader/yargs": ["yargs@17.7.2", "", { "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" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - - "@httptoolkit/websocket-stream/duplexify": ["duplexify@3.7.1", "", { "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="], - - "@httptoolkit/websocket-stream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - - "@httptoolkit/websocket-stream/ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], - - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - - "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - - "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - - "@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - - "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - - "@jridgewell/source-map/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - - "@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - - "@libp2p/crypto/@libp2p/interface": ["@libp2p/interface@3.0.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-fiHoXGUDiaZeksSm+Chf4/tuUynQuDWtadrbqDFxq0nJ5Q7aHPgsmJba7xSfELcqfQCTp00a31FQvXWSk7Oigg=="], - - "@libp2p/identify/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "@libp2p/identify/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], - - "@libp2p/peer-id/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "@libp2p/peer-record/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "@libp2p/peer-store/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "@libp2p/ping/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "@libp2p/ping/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], - - "@libp2p/utils/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "@libp2p/utils/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], - - "@libp2p/websockets/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], - - "@libp2p/webtransport/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], - - "@libp2p/webtransport/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], - - "@macaron-css/babel/@emotion/hash": ["@emotion/hash@0.8.0", "", {}, "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="], - - "@macaron-css/integration/esbuild": ["esbuild@0.14.54", "", { "optionalDependencies": { "@esbuild/linux-loong64": "0.14.54", "esbuild-android-64": "0.14.54", "esbuild-android-arm64": "0.14.54", "esbuild-darwin-64": "0.14.54", "esbuild-darwin-arm64": "0.14.54", "esbuild-freebsd-64": "0.14.54", "esbuild-freebsd-arm64": "0.14.54", "esbuild-linux-32": "0.14.54", "esbuild-linux-64": "0.14.54", "esbuild-linux-arm": "0.14.54", "esbuild-linux-arm64": "0.14.54", "esbuild-linux-mips64le": "0.14.54", "esbuild-linux-ppc64le": "0.14.54", "esbuild-linux-riscv64": "0.14.54", "esbuild-linux-s390x": "0.14.54", "esbuild-netbsd-64": "0.14.54", "esbuild-openbsd-64": "0.14.54", "esbuild-sunos-64": "0.14.54", "esbuild-windows-32": "0.14.54", "esbuild-windows-64": "0.14.54", "esbuild-windows-arm64": "0.14.54" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA=="], - - "@macaron-css/solid/@macaron-css/core": ["@macaron-css/core@1.5.2", "", { "dependencies": { "@vanilla-extract/css": "^1.7.1", "@vanilla-extract/dynamic": "^2.0.3", "@vanilla-extract/recipes": "^0.2.5" } }, "sha512-oF/JOQ1s1jUD8/RA7PrpdozyXUtz3MsZviw8rCepmh6Olds/y+KAdpB1EprDRG7VmRd4MfOcEjb68pWrTwVsRg=="], - - "@modelcontextprotocol/sdk/eventsource": ["eventsource@3.0.5", "", { "dependencies": { "eventsource-parser": "^3.0.0" } }, "sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw=="], - - "@modelcontextprotocol/sdk/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], - - "@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.24.3", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A=="], - - "@modular-forms/solid/valibot": ["valibot@1.0.0-rc.3", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-LT0REa7Iqx4QGcaHLiTiTkcmJqJ9QdpOy89HALFFBJgejTS64GQFRIbDF7e4f6pauQbo/myfKGmWXCLhMeM6+g=="], - - "@multiformats/dns/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - - "@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], - - "@multiformats/multiaddr-matcher/@multiformats/multiaddr": ["@multiformats/multiaddr@12.5.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@multiformats/dns": "^1.0.3", "abort-error": "^1.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ=="], - - "@neondatabase/serverless/@types/node": ["@types/node@22.18.6", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ=="], - - "@nestri/functions/@cloudflare/workers-types": ["@cloudflare/workers-types@4.20250522.0", "", {}, "sha512-9RIffHobc35JWeddzBguGgPa4wLDr5x5F94+0/qy7LiV6pTBQ/M5qGEN9VA16IDT3EUpYI0WKh6VpcmeVEtVtw=="], - - "@nestri/functions/@openauthjs/openauth": ["@openauthjs/openauth@0.0.0-20250322224806", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-p5IWSRXvABcwocH2dNI0w8c1QJelIOFulwhKk+aLLFfUbs8u1pr7kQbYe8yCSM2+bcLHiwbogpUQc2ovrGwCuw=="], - - "@npmcli/agent/agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], - - "@npmcli/agent/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "@npmcli/agent/socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], - - "@npmcli/arborist/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "@npmcli/git/ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], - - "@npmcli/git/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "@openauthjs/openauth/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], - - "@openauthjs/openevent/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], - - "@openauthjs/solid/@openauthjs/openauth": ["@openauthjs/openauth@0.4.2", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-8+Bia559iffrZXfQ0LWXrVVVriochS88pDtB8indyQ1S+40MQgDBu8aBzKt+fgSrTmoQGCTT+wlOXgbjc9qIcw=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/instrumentation-grpc": ["@opentelemetry/instrumentation-grpc@0.200.0", "", { "dependencies": { "@opentelemetry/instrumentation": "0.200.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-iaPHlO1qb1WlGUq0oTx0rJND/BtBeTAtyEfflu2VwKDe8XZeia7UEOfiSQxnGqVSTwW5F0P1S5UzqeDJotreWQ=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-logs-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-prometheus/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-prometheus/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.55.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg=="], - - "@opentelemetry/instrumentation-amqplib/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-amqplib/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-aws-lambda/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-aws-lambda/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-aws-sdk/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-aws-sdk/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-aws-sdk/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-bunyan/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-cassandra-driver/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-cassandra-driver/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-connect/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-connect/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-cucumber/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-cucumber/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-dns/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-express/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-express/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-fastify/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-fastify/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-fastify/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-fs/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-grpc/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.27.0", "", {}, "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg=="], - - "@opentelemetry/instrumentation-hapi/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-hapi/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-ioredis/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-ioredis/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-kafkajs/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-knex/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-koa/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-koa/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-memcached/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-memcached/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-mongodb/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-mongoose/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-mongoose/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-mysql/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-mysql2/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-nestjs-core/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-nestjs-core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-net/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-net/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-pg/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-pg/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-pg/@types/pg": ["@types/pg@8.6.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w=="], - - "@opentelemetry/instrumentation-pino/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-pino/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-redis/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-redis/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-redis-4/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-redis-4/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-restify/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-restify/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-restify/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-router/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-router/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-runtime-node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-socket.io/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-socket.io/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-tedious/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-undici/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/instrumentation-undici/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/instrumentation-winston/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/otlp-transformer/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@opentelemetry/resource-detector-alibaba-cloud/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/resource-detector-alibaba-cloud/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/resource-detector-alibaba-cloud/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/resource-detector-aws/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/resource-detector-aws/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/resource-detector-aws/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/resource-detector-azure/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/resource-detector-azure/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/resource-detector-azure/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/resource-detector-container/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/resource-detector-container/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/resource-detector-container/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/resource-detector-gcp/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/resource-detector-gcp/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/resource-detector-gcp/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sdk-logs/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/sdk-metrics/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/sdk-node/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@opentelemetry/sdk-node/@opentelemetry/exporter-zipkin": ["@opentelemetry/exporter-zipkin@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-icxaKZ+jZL/NHXX8Aru4HGsrdhK0MLcuRXkX5G5IRmCgoRLw+Br6I/nMVozX2xjGGwV7hw2g+4Slj8K7s4HbVg=="], - - "@opentelemetry/sdk-node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], - - "@opentelemetry/sdk-node/@opentelemetry/propagator-b3": ["@opentelemetry/propagator-b3@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-blx9S2EI49Ycuw6VZq+bkpaIoiJFhsDuvFGhBIoH3vJ5oYjJ2U0s3fAM5jYft99xVIAv6HqoPtlP9gpVA2IZtA=="], - - "@opentelemetry/sdk-node/@opentelemetry/propagator-jaeger": ["@opentelemetry/propagator-jaeger@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-Mbm/LSFyAtQKP0AQah4AfGgsD+vsZcyreZoQ5okFBk33hU7AquU4TltgyL9dvaO8/Zkoud8/0gEvwfOZ5d7EPA=="], - - "@opentelemetry/sdk-node/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.0.0", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.0.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-omdilCZozUjQwY3uZRBwbaRMJ3p09l4t187Lsdf0dGMye9WKD4NGcpgZRvqhI1dwcH6og+YXQEtoO9Wx3ykilg=="], - - "@opentelemetry/sdk-node/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sql-common/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@oslojs/jwt/@oslojs/encoding": ["@oslojs/encoding@0.4.1", "", {}, "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="], - - "@rocicorp/zero/@opentelemetry/resources": ["@opentelemetry/resources@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg=="], - - "@rocicorp/zero/@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.0.0", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.0.0", "@opentelemetry/core": "2.0.0", "@opentelemetry/sdk-trace-base": "2.0.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-omdilCZozUjQwY3uZRBwbaRMJ3p09l4t187Lsdf0dGMye9WKD4NGcpgZRvqhI1dwcH6og+YXQEtoO9Wx3ykilg=="], - - "@rocicorp/zero/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], - - "@rocicorp/zero/ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], - - "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - - "@rollup/pluginutils/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - - "@smithy/eventstream-codec/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@smithy/eventstream-serde-browser/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@smithy/eventstream-serde-config-resolver/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@smithy/eventstream-serde-node/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@smithy/eventstream-serde-universal/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@smithy/middleware-retry/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "@smithy/util-waiter/@smithy/abort-controller": ["@smithy/abort-controller@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA=="], - - "@smithy/util-waiter/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@types/bun/bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="], - - "@types/pg/@types/node": ["@types/node@22.18.6", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ=="], - - "@types/pg-pool/@types/pg": ["@types/pg@8.6.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w=="], - - "@vanilla-extract/css/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "@vanilla-extract/integration/find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - - "@vanilla-extract/integration/vite": ["vite@5.4.12", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA=="], - - "@vanilla-extract/vite-plugin/vite": ["vite@5.4.16", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-Y5gnfp4NemVfgOTDQAunSD4346fal44L9mszGGY/e+qxsRT5y1sMlS/8tiQ8AFAp+MFgYNSINdfEchJiPm41vQ=="], - - "accepts/mime-types": ["mime-types@3.0.0", "", { "dependencies": { "mime-db": "^1.53.0" } }, "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w=="], - - "accepts/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - - "actor-core/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], - - "ajv-formats/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "astro/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "astro/esbuild": ["esbuild@0.25.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.1", "@esbuild/android-arm": "0.25.1", "@esbuild/android-arm64": "0.25.1", "@esbuild/android-x64": "0.25.1", "@esbuild/darwin-arm64": "0.25.1", "@esbuild/darwin-x64": "0.25.1", "@esbuild/freebsd-arm64": "0.25.1", "@esbuild/freebsd-x64": "0.25.1", "@esbuild/linux-arm": "0.25.1", "@esbuild/linux-arm64": "0.25.1", "@esbuild/linux-ia32": "0.25.1", "@esbuild/linux-loong64": "0.25.1", "@esbuild/linux-mips64el": "0.25.1", "@esbuild/linux-ppc64": "0.25.1", "@esbuild/linux-riscv64": "0.25.1", "@esbuild/linux-s390x": "0.25.1", "@esbuild/linux-x64": "0.25.1", "@esbuild/netbsd-arm64": "0.25.1", "@esbuild/netbsd-x64": "0.25.1", "@esbuild/openbsd-arm64": "0.25.1", "@esbuild/openbsd-x64": "0.25.1", "@esbuild/sunos-x64": "0.25.1", "@esbuild/win32-arm64": "0.25.1", "@esbuild/win32-ia32": "0.25.1", "@esbuild/win32-x64": "0.25.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ=="], - - "astro/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - - "astro/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - - "astro/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - - "astro/vite": ["vite@6.4.0", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw=="], - - "astro/vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], - - "aws-crt/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - - "aws-crt/mqtt": ["mqtt@4.3.8", "", { "dependencies": { "commist": "^1.0.0", "concat-stream": "^2.0.0", "debug": "^4.1.1", "duplexify": "^4.1.1", "help-me": "^3.0.0", "inherits": "^2.0.3", "lru-cache": "^6.0.0", "minimist": "^1.2.5", "mqtt-packet": "^6.8.0", "number-allocator": "^1.0.9", "pump": "^3.0.0", "readable-stream": "^3.6.0", "reinterval": "^1.1.0", "rfdc": "^1.3.0", "split2": "^3.1.0", "ws": "^7.5.5", "xtend": "^4.0.2" }, "bin": { "mqtt": "bin/mqtt.js", "mqtt_pub": "bin/pub.js", "mqtt_sub": "bin/sub.js" } }, "sha512-2xT75uYa0kiPEF/PE0VPdavmEkoBzMT/UL9moid0rAvlCtV48qBwxD62m7Ld/4j8tSkIO1E/iqRl/S72SEOhOw=="], - - "axios/form-data": ["form-data@4.0.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="], - - "babel-plugin-jsx-dom-expressions/@babel/helper-module-imports": ["@babel/helper-module-imports@7.18.6", "", { "dependencies": { "@babel/types": "^7.18.6" } }, "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="], - - "bl/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - - "body-parser/iconv-lite": ["iconv-lite@0.5.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag=="], - - "body-parser/qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], - - "boxen/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "bun-types/@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], - - "bytebuffer/long": ["long@3.2.0", "", {}, "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg=="], - - "cacache/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "cacheable-request/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], - - "cacheable-request/http-cache-semantics": ["http-cache-semantics@4.1.1", "", {}, "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="], - - "cheerio/entities": ["entities@1.1.2", "", {}, "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="], - - "cheerio/htmlparser2": ["htmlparser2@3.10.1", "", { "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" } }, "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ=="], - - "cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], - - "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], - - "command-line-usage/chalk-template": ["chalk-template@0.4.0", "", { "dependencies": { "chalk": "^4.1.2" } }, "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg=="], - - "concat-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "content-disposition/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "css-select/css-what": ["css-what@2.1.3", "", {}, "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="], - - "css-select/domutils": ["domutils@1.5.1", "", { "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw=="], - - "dom-serializer/domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], - - "dom-serializer/entities": ["entities@1.1.2", "", {}, "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="], - - "domutils/dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - - "duplexify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "ecc-jsbn/jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], - - "eciesjs/@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], - - "eciesjs/@noble/curves": ["@noble/curves@1.9.0", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg=="], - - "eciesjs/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "effect/@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], - - "estree-walker/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], - - "express/cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], - - "express/debug": ["debug@4.3.6", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg=="], - - "express/mime-types": ["mime-types@3.0.0", "", { "dependencies": { "mime-db": "^1.53.0" } }, "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w=="], - - "express/qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], - - "express/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "express/send": ["send@1.1.0", "", { "dependencies": { "debug": "^4.3.5", "destroy": "^1.2.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^0.5.2", "http-errors": "^2.0.0", "mime-types": "^2.1.35", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA=="], - - "fast-json-stringify/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "form-data/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "hast-util-to-parse5/property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], - - "hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "http-proxy-agent/agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], - - "https-proxy-agent/agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], - - "import-in-the-middle/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], - - "ip-address/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], - - "libp2p/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - - "libp2p/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], - - "libp2p/p-retry": ["p-retry@7.1.0", "", { "dependencies": { "is-network-error": "^1.1.0" } }, "sha512-xL4PiFRQa/f9L9ZvR4/gUCRNus4N8YX80ku8kv9Jqz+ZokkiZLM0bcvX0gm1F3PDi9SPRsww1BDsTWgE6Y1GLQ=="], - - "libp2p/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], - - "make-fetch-happen/http-cache-semantics": ["http-cache-semantics@4.1.1", "", {}, "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="], - - "markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - - "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "mlly/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], - - "mlly/ufo": ["ufo@1.5.4", "", {}, "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="], - - "mqtt/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "mqtt/ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], - - "node-gyp/env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - - "ofetch/destr": ["destr@2.0.3", "", {}, "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ=="], - - "ofetch/node-fetch-native": ["node-fetch-native@1.6.6", "", {}, "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="], - - "ofetch/ufo": ["ufo@1.5.4", "", {}, "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="], - - "opencontrol/hono": ["hono@4.7.4", "", {}, "sha512-Pst8FuGqz3L7tFF+u9Pu70eI0xa5S3LPUmrNd5Jm8nTHze9FxLTK9Kaj5g/k4UcwuJSXTP65SyHOPLrffpcAJg=="], - - "opencontrol/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], - - "opencontrol/zod-to-json-schema": ["zod-to-json-schema@3.24.3", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A=="], - - "openid-client/jose": ["jose@4.15.9", "", {}, "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA=="], - - "openid-client/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - - "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "permessage-deflate/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "postcss/nanoid": ["nanoid@3.3.9", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg=="], - - "promise-retry/retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], - - "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - - "psl/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - - "qrcode/pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="], - - "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - - "readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - - "readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - - "request/form-data": ["form-data@2.3.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="], - - "request/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "request/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], - - "send/mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], - - "serve-static/send": ["send@1.1.0", "", { "dependencies": { "debug": "^4.3.5", "destroy": "^1.2.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^0.5.2", "http-errors": "^2.0.0", "mime-types": "^2.1.35", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA=="], - - "sshpk/jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], - - "sst/aws4fetch": ["aws4fetch@1.0.18", "", {}, "sha512-3Cf+YaUl07p24MoQ46rFwulAmiyCwH2+1zw1ZyPAX5OtJ34Hh185DwB8y/qRLb6cYYYtSFJ9pthyLc0MD4e8sQ=="], - - "steamcommunity/steamid": ["steamid@1.1.3", "", { "dependencies": { "cuint": "^0.2.1" } }, "sha512-t86YjtP1LtPt8D+TaIARm6PtC9tBnF1FhxQeLFs6ohG7vDUfQuy/M8II14rx1TTUkVuYoWHP/7DlvTtoCGULcw=="], - - "string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - - "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], - - "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], - - "tar-stream/bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], - - "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "terser/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], - - "tinyglobby/fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - - "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - - "tough-cookie/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - - "ts-node/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], - - "ts-node/diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], - - "tsx/esbuild": ["esbuild@0.25.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.0", "@esbuild/android-arm": "0.25.0", "@esbuild/android-arm64": "0.25.0", "@esbuild/android-x64": "0.25.0", "@esbuild/darwin-arm64": "0.25.0", "@esbuild/darwin-x64": "0.25.0", "@esbuild/freebsd-arm64": "0.25.0", "@esbuild/freebsd-x64": "0.25.0", "@esbuild/linux-arm": "0.25.0", "@esbuild/linux-arm64": "0.25.0", "@esbuild/linux-ia32": "0.25.0", "@esbuild/linux-loong64": "0.25.0", "@esbuild/linux-mips64el": "0.25.0", "@esbuild/linux-ppc64": "0.25.0", "@esbuild/linux-riscv64": "0.25.0", "@esbuild/linux-s390x": "0.25.0", "@esbuild/linux-x64": "0.25.0", "@esbuild/netbsd-arm64": "0.25.0", "@esbuild/netbsd-x64": "0.25.0", "@esbuild/openbsd-arm64": "0.25.0", "@esbuild/openbsd-x64": "0.25.0", "@esbuild/sunos-x64": "0.25.0", "@esbuild/win32-arm64": "0.25.0", "@esbuild/win32-ia32": "0.25.0", "@esbuild/win32-x64": "0.25.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw=="], - - "tunnel-agent/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "type-is/mime-types": ["mime-types@3.0.0", "", { "dependencies": { "mime-db": "^1.53.0" } }, "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w=="], - - "typedoc/yaml": ["yaml@2.7.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ=="], - - "uint8arrays/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], - - "unified/vfile": ["vfile@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg=="], - - "unstorage/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "uri-js/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - - "verror/core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], - - "vite/esbuild": ["esbuild@0.24.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="], - - "vite-node/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - - "vite-node/vite": ["vite@5.4.12", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA=="], - - "weald/ms": ["ms@3.0.0-canary.1", "", {}, "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g=="], - - "widest-line/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - - "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - - "yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], - - "@ampproject/remapping/@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - - "@apidevtools/json-schema-ref-parser/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "@astrojs/markdown-remark/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - - "@aws-crypto/sha256-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], - - "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - - "@aws-crypto/sha256-js/@aws-sdk/types/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], - - "@aws-crypto/util/@aws-sdk/types/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], - - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - - "@aws-sdk/client-lambda/@aws-sdk/core/@smithy/property-provider": ["@smithy/property-provider@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw=="], - - "@aws-sdk/client-lambda/@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.1.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.4", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-C+s/A72pd7CXwEsJj9+Uq9T726iIfIF18hGRY8o82xcIEfOyakiPnlisku8zZOaAu+jm0CihbbYN4NyYNQ+HZQ=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-gIRzTLnAsRfRSNarCag7G7rhcHagz4x5nNTWRihQs5cwTOghEExDy7Tj5m4TEkv3dcTAsNn+l4tnR4nZXo6R+Q=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/credential-provider-env": "3.821.0", "@aws-sdk/credential-provider-http": "3.821.0", "@aws-sdk/credential-provider-process": "3.821.0", "@aws-sdk/credential-provider-sso": "3.821.0", "@aws-sdk/credential-provider-web-identity": "3.821.0", "@aws-sdk/nested-clients": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-VRTrmsca8kBHtY1tTek1ce+XkK/H0fzodBKcilM/qXjTyumMHPAzVAxKZfSvGC+28/pXyQzhOEyxZfw7giCiWA=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-e18ucfqKB3ICNj5RP/FEdvUfhVK6E9MALOsl8pKP13mwegug46p/1BsZWACD5n+Zf9ViiiHxIO7td03zQixfwA=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.821.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.821.0", "@aws-sdk/core": "3.821.0", "@aws-sdk/token-providers": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-Dt+pheBLom4O/egO4L75/72k9C1qtUOLl0F0h6lmqZe4Mvhz+wDtjoO/MdGC/P1q0kcIX/bBKr0NQ3cIvAH8pA=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/nested-clients": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-FF5wnRJkxSQaCVVvWNv53K1MhTMgH8d+O+MHTbkv51gVIgVATrtfFQMKBLcEAxzXrgAliIO3LiNv+1TqqBZ+BA=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.6", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "tslib": "^2.6.2" } }, "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw=="], - - "@aws-sdk/client-lambda/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w=="], - - "@aws-sdk/client-lambda/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw=="], - - "@aws-sdk/client-lambda/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.1" } }, "sha512-LvcfhrnCBvCmTee81pRlh1F39yTS/+kYleVeLCwNtkY8wtGg8V/ca9rbZZvYIl8OjlMtL6KIjaiL/lgVqHD2nA=="], - - "@aws-sdk/client-lambda/@smithy/middleware-retry/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "@aws-sdk/client-lambda/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw=="], - - "@aws-sdk/client-lambda/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw=="], - - "@aws-sdk/client-lambda/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA=="], - - "@aws-sdk/client-lambda/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w=="], - - "@aws-sdk/client-lambda/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w=="], - - "@aws-sdk/client-lambda/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw=="], - - "@aws-sdk/client-lambda/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.6", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "tslib": "^2.6.2" } }, "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw=="], - - "@aws-sdk/client-lambda/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.0.4", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw=="], - - "@aws-sdk/client-lambda/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.1" } }, "sha512-LvcfhrnCBvCmTee81pRlh1F39yTS/+kYleVeLCwNtkY8wtGg8V/ca9rbZZvYIl8OjlMtL6KIjaiL/lgVqHD2nA=="], - - "@aws-sdk/client-rds-data/@aws-sdk/core/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-rds-data/@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.0.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" } }, "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/credential-provider-env": "3.758.0", "@aws-sdk/credential-provider-http": "3.758.0", "@aws-sdk/credential-provider-process": "3.758.0", "@aws-sdk/credential-provider-sso": "3.758.0", "@aws-sdk/credential-provider-web-identity": "3.758.0", "@aws-sdk/nested-clients": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.758.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.758.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/token-providers": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/nested-clients": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/client-rds-data/@smithy/core/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/client-rds-data/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0" } }, "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA=="], - - "@aws-sdk/client-rds-data/@smithy/middleware-retry/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "@aws-sdk/client-rds-data/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-rds-data/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/client-rds-data/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g=="], - - "@aws-sdk/client-rds-data/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], - - "@aws-sdk/client-rds-data/@smithy/smithy-client/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/client-rds-data/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw=="], - - "@aws-sdk/client-rds-data/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-rds-data/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg=="], - - "@aws-sdk/client-rds-data/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-rds-data/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0" } }, "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA=="], - - "@aws-sdk/client-s3/@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.1.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-nbPwmZn0kt6Q1XI2FaJWP6AhF9tro4cO5HlmZQx8NU+B0H1y9WMo659Q5zLLY46BXgoQVIJEsPSZpcZk27O4aw=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-e/gB2iJQQ4ZpecOVpEFhEvjGwuTqNCzhVaVsFYVc49FPfR1seuN7qBGYe1MO7mouGDQFInzJgcNup0DnYUrLiw=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/credential-provider-env": "3.806.0", "@aws-sdk/credential-provider-http": "3.806.0", "@aws-sdk/credential-provider-process": "3.806.0", "@aws-sdk/credential-provider-sso": "3.806.0", "@aws-sdk/credential-provider-web-identity": "3.806.0", "@aws-sdk/nested-clients": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-FogfbuYSEZgFxbNy0QcsBZHHe5mSv5HV3+JyB5n0kCyjOISCVCZD7gwxKdXjt8O1hXq5k5SOdQvydGULlB6rew=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-8Y8GYEw/1e5IZRDQL02H6nsTDcRWid/afRMeWg+93oLQmbHcTtdm48tjis+7Xwqy+XazhMDmkbUht11QPTDJcQ=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.806.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.806.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/token-providers": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-hT9OBwCxWMPBydNhXm2gdNNzx5AJNheS9RglwDDvXWzQ9qDuRztjuMBilMSUMb0HF9K4IqQjYzGqczMuktz4qQ=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/nested-clients": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-XxaSY9Zd3D4ClUGENYMvi52ac5FuJPPAsvRtEfyrSdEpf6QufbMpnexWBZMYRF31h/VutgqtJwosGgNytpxMEg=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA=="], - - "@aws-sdk/client-s3/@aws-sdk/signature-v4-multi-region/@smithy/signature-v4": ["@smithy/signature-v4@5.1.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.0.2", "", { "dependencies": { "@smithy/eventstream-codec": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.0.2", "", { "dependencies": { "@smithy/eventstream-codec": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng=="], - - "@aws-sdk/client-s3/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.3", "", { "dependencies": { "@smithy/types": "^4.2.0" } }, "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q=="], - - "@aws-sdk/client-s3/@smithy/middleware-retry/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "@aws-sdk/client-s3/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA=="], - - "@aws-sdk/client-s3/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.3", "", { "dependencies": { "@smithy/types": "^4.2.0" } }, "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q=="], - - "@aws-sdk/client-sesv2/@aws-sdk/core/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.0.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" } }, "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/credential-provider-env": "3.758.0", "@aws-sdk/credential-provider-http": "3.758.0", "@aws-sdk/credential-provider-process": "3.758.0", "@aws-sdk/credential-provider-sso": "3.758.0", "@aws-sdk/credential-provider-web-identity": "3.758.0", "@aws-sdk/nested-clients": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.758.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.758.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/token-providers": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.758.0", "", { "dependencies": { "@aws-sdk/core": "3.758.0", "@aws-sdk/nested-clients": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/client-sesv2/@smithy/core/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/client-sesv2/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0" } }, "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA=="], - - "@aws-sdk/client-sesv2/@smithy/middleware-retry/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "@aws-sdk/client-sesv2/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-sesv2/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/client-sesv2/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g=="], - - "@aws-sdk/client-sesv2/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], - - "@aws-sdk/client-sesv2/@smithy/smithy-client/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/client-sesv2/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw=="], - - "@aws-sdk/client-sesv2/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-sesv2/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg=="], - - "@aws-sdk/client-sesv2/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/client-sesv2/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0" } }, "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA=="], - - "@aws-sdk/client-sqs/@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.1.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-nbPwmZn0kt6Q1XI2FaJWP6AhF9tro4cO5HlmZQx8NU+B0H1y9WMo659Q5zLLY46BXgoQVIJEsPSZpcZk27O4aw=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-e/gB2iJQQ4ZpecOVpEFhEvjGwuTqNCzhVaVsFYVc49FPfR1seuN7qBGYe1MO7mouGDQFInzJgcNup0DnYUrLiw=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/credential-provider-env": "3.806.0", "@aws-sdk/credential-provider-http": "3.806.0", "@aws-sdk/credential-provider-process": "3.806.0", "@aws-sdk/credential-provider-sso": "3.806.0", "@aws-sdk/credential-provider-web-identity": "3.806.0", "@aws-sdk/nested-clients": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/credential-provider-imds": "^4.0.2", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-FogfbuYSEZgFxbNy0QcsBZHHe5mSv5HV3+JyB5n0kCyjOISCVCZD7gwxKdXjt8O1hXq5k5SOdQvydGULlB6rew=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-8Y8GYEw/1e5IZRDQL02H6nsTDcRWid/afRMeWg+93oLQmbHcTtdm48tjis+7Xwqy+XazhMDmkbUht11QPTDJcQ=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.806.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.806.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/token-providers": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-hT9OBwCxWMPBydNhXm2gdNNzx5AJNheS9RglwDDvXWzQ9qDuRztjuMBilMSUMb0HF9K4IqQjYzGqczMuktz4qQ=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.806.0", "", { "dependencies": { "@aws-sdk/core": "3.806.0", "@aws-sdk/nested-clients": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-XxaSY9Zd3D4ClUGENYMvi52ac5FuJPPAsvRtEfyrSdEpf6QufbMpnexWBZMYRF31h/VutgqtJwosGgNytpxMEg=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA=="], - - "@aws-sdk/client-sqs/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.3", "", { "dependencies": { "@smithy/types": "^4.2.0" } }, "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q=="], - - "@aws-sdk/client-sqs/@smithy/middleware-retry/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "@aws-sdk/client-sqs/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA=="], - - "@aws-sdk/client-sqs/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.3", "", { "dependencies": { "@smithy/types": "^4.2.0" } }, "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q=="], - - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/core/@smithy/core": ["@smithy/core@3.3.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ=="], - - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.1.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w=="], - - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/core/@smithy/smithy-client": ["@smithy/smithy-client@4.2.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-endpoint": "^4.1.4", "@smithy/middleware-stack": "^4.0.2", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q=="], - - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-serde": "^4.0.3", "@smithy/node-config-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g=="], - - "@aws-sdk/middleware-sdk-sqs/@smithy/smithy-client/@smithy/core": ["@smithy/core@3.3.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.2", "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ=="], - - "@aws-sdk/middleware-sdk-sqs/@smithy/smithy-client/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-serde": "^4.0.3", "@smithy/node-config-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@aws-sdk/core": ["@aws-sdk/core@3.758.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/core": "^3.1.5", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.723.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/core": ["@smithy/core@3.1.5", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.1.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.0.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.1.6", "", { "dependencies": { "@smithy/core": "^3.1.5", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-stack": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" } }, "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-middleware": ["@smithy/util-middleware@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-middleware": ["@smithy/util-middleware@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA=="], - - "@babel/generator/@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - - "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - - "@chainsafe/libp2p-quic/@libp2p/interface/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger": ["@libp2p/logger@5.2.0", "", { "dependencies": { "@libp2p/interface": "^2.11.0", "@multiformats/multiaddr": "^12.4.4", "interface-datastore": "^8.3.1", "multiformats": "^13.3.6", "weald": "^1.0.4" } }, "sha512-OEFS529CnIKfbWEHmuCNESw9q0D0hL8cQ8klQfjIVPur15RcgAEgc1buQ7Y6l0B6tCYg120bp55+e9tGvn8c0g=="], - - "@chainsafe/libp2p-quic/@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], - - "@fastify/ajv-compiler/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "@grpc/proto-loader/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - - "@grpc/proto-loader/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - - "@httptoolkit/websocket-stream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - - "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - - "@jridgewell/source-map/@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - - "@macaron-css/integration/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.14.54", "", { "os": "linux", "cpu": "none" }, "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw=="], - - "@modelcontextprotocol/sdk/eventsource/eventsource-parser": ["eventsource-parser@3.0.0", "", {}, "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA=="], - - "@multiformats/dns/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "@multiformats/multiaddr-matcher/@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], - - "@neondatabase/serverless/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - - "@nestri/functions/@openauthjs/openauth/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], - - "@openauthjs/solid/@openauthjs/openauth/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/instrumentation-grpc/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/auto-instrumentations-node/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-logs-otlp-http/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-prometheus/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-prometheus/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-fs/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-pino/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/instrumentation-undici/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/otlp-transformer/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/otlp-transformer/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sdk-logs/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sdk-logs/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sdk-metrics/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sdk-metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-node/@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.0.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-IEkJGzK1A9v3/EHjXh3s2IiFc6L4jfK+lNgKVgUjeUJQRRhnVFMIO3TAvKwonm9O1HebCuoOt98v8bZW7oVQHA=="], - - "@opentelemetry/sql-common/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@rocicorp/zero/@opentelemetry/resources/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@rocicorp/zero/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@rocicorp/zero/@opentelemetry/sdk-trace-node/@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.0.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-IEkJGzK1A9v3/EHjXh3s2IiFc6L4jfK+lNgKVgUjeUJQRRhnVFMIO3TAvKwonm9O1HebCuoOt98v8bZW7oVQHA=="], - - "@rocicorp/zero/@opentelemetry/sdk-trace-node/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], - - "@rocicorp/zero/@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.0", "", { "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw=="], - - "@types/bun/bun-types/@types/node": ["@types/node@22.18.6", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ=="], - - "@types/pg/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - - "@vanilla-extract/integration/find-up/locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - - "@vanilla-extract/integration/find-up/path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - - "@vanilla-extract/integration/vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "@vanilla-extract/integration/vite/rollup": ["rollup@4.35.0", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.35.0", "@rollup/rollup-android-arm64": "4.35.0", "@rollup/rollup-darwin-arm64": "4.35.0", "@rollup/rollup-darwin-x64": "4.35.0", "@rollup/rollup-freebsd-arm64": "4.35.0", "@rollup/rollup-freebsd-x64": "4.35.0", "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", "@rollup/rollup-linux-arm-musleabihf": "4.35.0", "@rollup/rollup-linux-arm64-gnu": "4.35.0", "@rollup/rollup-linux-arm64-musl": "4.35.0", "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", "@rollup/rollup-linux-riscv64-gnu": "4.35.0", "@rollup/rollup-linux-s390x-gnu": "4.35.0", "@rollup/rollup-linux-x64-gnu": "4.35.0", "@rollup/rollup-linux-x64-musl": "4.35.0", "@rollup/rollup-win32-arm64-msvc": "4.35.0", "@rollup/rollup-win32-ia32-msvc": "4.35.0", "@rollup/rollup-win32-x64-msvc": "4.35.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "accepts/mime-types/mime-db": ["mime-db@1.53.0", "", {}, "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg=="], - - "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "astro/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ=="], - - "astro/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.1", "", { "os": "android", "cpu": "arm" }, "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q=="], - - "astro/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.1", "", { "os": "android", "cpu": "arm64" }, "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA=="], - - "astro/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.1", "", { "os": "android", "cpu": "x64" }, "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw=="], - - "astro/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ=="], - - "astro/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA=="], - - "astro/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A=="], - - "astro/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww=="], - - "astro/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.1", "", { "os": "linux", "cpu": "arm" }, "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ=="], - - "astro/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ=="], - - "astro/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ=="], - - "astro/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.1", "", { "os": "linux", "cpu": "none" }, "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg=="], - - "astro/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.1", "", { "os": "linux", "cpu": "none" }, "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg=="], - - "astro/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg=="], - - "astro/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.1", "", { "os": "linux", "cpu": "none" }, "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ=="], - - "astro/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ=="], - - "astro/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA=="], - - "astro/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.1", "", { "os": "none", "cpu": "arm64" }, "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g=="], - - "astro/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.1", "", { "os": "none", "cpu": "x64" }, "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA=="], - - "astro/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg=="], - - "astro/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw=="], - - "astro/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg=="], - - "astro/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ=="], - - "astro/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A=="], - - "astro/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg=="], - - "astro/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "astro/vite/fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - - "aws-crt/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "aws-crt/mqtt/commist": ["commist@1.1.0", "", { "dependencies": { "leven": "^2.1.0", "minimist": "^1.1.0" } }, "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg=="], - - "aws-crt/mqtt/help-me": ["help-me@3.0.0", "", { "dependencies": { "glob": "^7.1.6", "readable-stream": "^3.6.0" } }, "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ=="], - - "aws-crt/mqtt/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "aws-crt/mqtt/mqtt-packet": ["mqtt-packet@6.10.0", "", { "dependencies": { "bl": "^4.0.2", "debug": "^4.1.1", "process-nextick-args": "^2.0.1" } }, "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA=="], - - "aws-crt/mqtt/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "aws-crt/mqtt/split2": ["split2@3.2.2", "", { "dependencies": { "readable-stream": "^3.0.0" } }, "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg=="], - - "aws-crt/mqtt/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - - "bl/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "boxen/string-width/emoji-regex": ["emoji-regex@10.5.0", "", {}, "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg=="], - - "boxen/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - - "cheerio/htmlparser2/domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], - - "cheerio/htmlparser2/domhandler": ["domhandler@2.4.2", "", { "dependencies": { "domelementtype": "1" } }, "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA=="], - - "cheerio/htmlparser2/domutils": ["domutils@1.7.0", "", { "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="], - - "cheerio/htmlparser2/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "command-line-usage/chalk-template/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "css-select/domutils/domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], - - "express/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], - - "express/mime-types/mime-db": ["mime-db@1.53.0", "", {}, "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg=="], - - "express/send/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - - "express/send/fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], - - "express/send/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "fast-json-stringify/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - - "serve-static/send/fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], - - "tar-stream/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - - "tar/fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ=="], - - "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.0", "", { "os": "android", "cpu": "arm" }, "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g=="], - - "tsx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.0", "", { "os": "android", "cpu": "arm64" }, "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g=="], - - "tsx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.0", "", { "os": "android", "cpu": "x64" }, "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg=="], - - "tsx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw=="], - - "tsx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg=="], - - "tsx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w=="], - - "tsx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A=="], - - "tsx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.0", "", { "os": "linux", "cpu": "arm" }, "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg=="], - - "tsx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg=="], - - "tsx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg=="], - - "tsx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.0", "", { "os": "linux", "cpu": "none" }, "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw=="], - - "tsx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.0", "", { "os": "linux", "cpu": "none" }, "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ=="], - - "tsx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw=="], - - "tsx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.0", "", { "os": "linux", "cpu": "none" }, "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA=="], - - "tsx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA=="], - - "tsx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.0", "", { "os": "linux", "cpu": "x64" }, "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw=="], - - "tsx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.0", "", { "os": "none", "cpu": "arm64" }, "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw=="], - - "tsx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.0", "", { "os": "none", "cpu": "x64" }, "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA=="], - - "tsx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw=="], - - "tsx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg=="], - - "tsx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg=="], - - "tsx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw=="], - - "tsx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA=="], - - "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.0", "", { "os": "win32", "cpu": "x64" }, "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ=="], - - "type-is/mime-types/mime-db": ["mime-db@1.53.0", "", {}, "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg=="], - - "vite-node/vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "vite-node/vite/rollup": ["rollup@4.35.0", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.35.0", "@rollup/rollup-android-arm64": "4.35.0", "@rollup/rollup-darwin-arm64": "4.35.0", "@rollup/rollup-darwin-x64": "4.35.0", "@rollup/rollup-freebsd-arm64": "4.35.0", "@rollup/rollup-freebsd-x64": "4.35.0", "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", "@rollup/rollup-linux-arm-musleabihf": "4.35.0", "@rollup/rollup-linux-arm64-gnu": "4.35.0", "@rollup/rollup-linux-arm64-musl": "4.35.0", "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", "@rollup/rollup-linux-riscv64-gnu": "4.35.0", "@rollup/rollup-linux-s390x-gnu": "4.35.0", "@rollup/rollup-linux-x64-gnu": "4.35.0", "@rollup/rollup-linux-x64-musl": "4.35.0", "@rollup/rollup-win32-arm64-msvc": "4.35.0", "@rollup/rollup-win32-ia32-msvc": "4.35.0", "@rollup/rollup-win32-x64-msvc": "4.35.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg=="], - - "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="], - - "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="], - - "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="], - - "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="], - - "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="], - - "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="], - - "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="], - - "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="], - - "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="], - - "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="], - - "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="], - - "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="], - - "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="], - - "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="], - - "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="], - - "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="], - - "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="], - - "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="], - - "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="], - - "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="], - - "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="], - - "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="], - - "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="], - - "widest-line/string-width/emoji-regex": ["emoji-regex@10.5.0", "", {}, "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg=="], - - "widest-line/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - - "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.5.0", "", {}, "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg=="], - - "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - - "yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - - "yargs/find-up/path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - - "yargs/yargs-parser/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], - - "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], - - "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], - - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.821.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.821.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", "@aws-sdk/middleware-user-agent": "3.821.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.821.0", "@aws-sdk/util-user-agent-browser": "3.821.0", "@aws-sdk/util-user-agent-node": "3.821.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.5.1", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", "@smithy/middleware-endpoint": "^4.1.9", "@smithy/middleware-retry": "^4.1.10", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.17", "@smithy/util-defaults-mode-node": "^4.0.17", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-2IuHcUsWw44ftSEDYU4dvktTEqgyDvkOcfpoGC/UmT4Qo6TVCP3U5tWEGpNK9nN+7nLvekruxxG/jaMt5/oWVw=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.821.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.821.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", "@aws-sdk/middleware-user-agent": "3.821.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.821.0", "@aws-sdk/util-user-agent-browser": "3.821.0", "@aws-sdk/util-user-agent-node": "3.821.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.5.1", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", "@smithy/middleware-endpoint": "^4.1.9", "@smithy/middleware-retry": "^4.1.10", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.17", "@smithy/util-defaults-mode-node": "^4.0.17", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-aDEBZUKUd/+Tvudi0d9KQlqt2OW2P27LATZX0jkNC8yVk4145bAPS04EYoqdKLuyUn/U33DibEOgKUpxZB12jQ=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.821.0", "", { "dependencies": { "@aws-sdk/core": "3.821.0", "@aws-sdk/nested-clients": "3.821.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-qJ7wgKhdxGbPg718zWXbCYKDuSWZNU3TSw64hPRW6FtbZrIyZxObpiTKC6DKwfsVoZZhHEoP/imGykN1OdOTJA=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.821.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.821.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", "@aws-sdk/middleware-user-agent": "3.821.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.821.0", "@aws-sdk/util-user-agent-browser": "3.821.0", "@aws-sdk/util-user-agent-node": "3.821.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.5.1", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", "@smithy/middleware-endpoint": "^4.1.9", "@smithy/middleware-retry": "^4.1.10", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.17", "@smithy/util-defaults-mode-node": "^4.0.17", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-2IuHcUsWw44ftSEDYU4dvktTEqgyDvkOcfpoGC/UmT4Qo6TVCP3U5tWEGpNK9nN+7nLvekruxxG/jaMt5/oWVw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.758.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-X0p/9/u9e6b22rlQqKucdtjdqmjSNB4c/8zDEoD5MvgYAAbMF9HNE0ST2xaA/WsJ7uE0jFfhPY2/00pslL1DqQ=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.806.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-I6SxcsvV7yinJZmPgGullFHS0tsTKa7K3jEc5dmyCz8X+kZPfsWNffZmtmnCvWXPqMXWBvK6hVaxwomx79yeHA=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.0.2", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.0.2", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http/@smithy/util-stream": ["@smithy/util-stream@4.1.2", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.758.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.758.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-X0p/9/u9e6b22rlQqKucdtjdqmjSNB4c/8zDEoD5MvgYAAbMF9HNE0ST2xaA/WsJ7uE0jFfhPY2/00pslL1DqQ=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.806.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.806.0", "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-I6SxcsvV7yinJZmPgGullFHS0tsTKa7K3jEc5dmyCz8X+kZPfsWNffZmtmnCvWXPqMXWBvK6hVaxwomx79yeHA=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg=="], - - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/core/@smithy/smithy-client/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.4", "", { "dependencies": { "@smithy/core": "^3.3.1", "@smithy/middleware-serde": "^4.0.3", "@smithy/node-config-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g=="], - - "@aws-sdk/middleware-sdk-sqs/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.1", "", { "dependencies": { "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@aws-sdk/core/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.2", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.0.6", "", { "dependencies": { "@smithy/core": "^3.1.5", "@smithy/middleware-serde": "^4.0.2", "@smithy/node-config-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.0.1", "", { "dependencies": { "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler": ["@smithy/node-http-handler@4.0.3", "", { "dependencies": { "@smithy/abort-controller": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/interface-datastore": ["interface-datastore@8.3.2", "", { "dependencies": { "interface-store": "^6.0.0", "uint8arrays": "^5.1.0" } }, "sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/weald": ["weald@1.0.4", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^9.4.0" } }, "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ=="], - - "@grpc/proto-loader/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "@rocicorp/zero/@opentelemetry/sdk-trace-node/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@rocicorp/zero/@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], - - "@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - - "@vanilla-extract/integration/find-up/locate-path/p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "@vanilla-extract/integration/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.35.0", "", { "os": "android", "cpu": "arm" }, "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.35.0", "", { "os": "android", "cpu": "arm64" }, "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.35.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.35.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.35.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.35.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.35.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.35.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.35.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.35.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw=="], - - "@vanilla-extract/integration/vite/rollup/@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.35.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw=="], - - "@vanilla-extract/integration/vite/rollup/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "@vanilla-extract/vite-plugin/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - - "aws-crt/mqtt/help-me/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "aws-crt/mqtt/mqtt-packet/bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], - - "boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - - "command-line-usage/chalk-template/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "command-line-usage/chalk-template/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - - "tar-stream/bl/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "vite-node/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "vite-node/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "vite-node/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "vite-node/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "vite-node/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "vite-node/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "vite-node/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "vite-node/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "vite-node/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "vite-node/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "vite-node/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "vite-node/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "vite-node/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "vite-node/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "vite-node/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "vite-node/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "vite-node/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "vite-node/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "vite-node/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "vite-node/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "vite-node/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "vite-node/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "vite-node/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - - "vite-node/vite/rollup/@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.35.0", "", { "os": "android", "cpu": "arm" }, "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ=="], - - "vite-node/vite/rollup/@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.35.0", "", { "os": "android", "cpu": "arm64" }, "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA=="], - - "vite-node/vite/rollup/@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.35.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q=="], - - "vite-node/vite/rollup/@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.35.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q=="], - - "vite-node/vite/rollup/@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.35.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ=="], - - "vite-node/vite/rollup/@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.35.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.35.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.35.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA=="], - - "vite-node/vite/rollup/@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg=="], - - "vite-node/vite/rollup/@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.35.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg=="], - - "vite-node/vite/rollup/@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.35.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw=="], - - "vite-node/vite/rollup/@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.35.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw=="], - - "vite-node/vite/rollup/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], - - "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - - "yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - - "@aws-sdk/client-lambda/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.821.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.821.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", "@aws-sdk/middleware-user-agent": "3.821.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.821.0", "@aws-sdk/util-user-agent-browser": "3.821.0", "@aws-sdk/util-user-agent-node": "3.821.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.5.1", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", "@smithy/middleware-endpoint": "^4.1.9", "@smithy/middleware-retry": "^4.1.10", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", "@smithy/smithy-client": "^4.4.1", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.17", "@smithy/util-defaults-mode-node": "^4.0.17", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-2IuHcUsWw44ftSEDYU4dvktTEqgyDvkOcfpoGC/UmT4Qo6TVCP3U5tWEGpNK9nN+7nLvekruxxG/jaMt5/oWVw=="], - - "@aws-sdk/client-rds-data/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg=="], - - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg=="], - - "@aws-sdk/client-sesv2/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.758.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.758.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.758.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.758.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.5", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.6", "@smithy/middleware-retry": "^4.0.7", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.3", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.6", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.7", "@smithy/util-defaults-mode-node": "^4.0.7", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg=="], - - "@aws-sdk/client-sqs/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.806.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.806.0", "@aws-sdk/middleware-host-header": "3.804.0", "@aws-sdk/middleware-logger": "3.804.0", "@aws-sdk/middleware-recursion-detection": "3.804.0", "@aws-sdk/middleware-user-agent": "3.806.0", "@aws-sdk/region-config-resolver": "3.806.0", "@aws-sdk/types": "3.804.0", "@aws-sdk/util-endpoints": "3.806.0", "@aws-sdk/util-user-agent-browser": "3.804.0", "@aws-sdk/util-user-agent-node": "3.806.0", "@smithy/config-resolver": "^4.1.1", "@smithy/core": "^3.3.1", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.3", "@smithy/middleware-retry": "^4.1.4", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.1.0", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.3", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.11", "@smithy/util-defaults-mode-node": "^4.0.11", "@smithy/util-endpoints": "^3.0.3", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.2", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser": ["@smithy/url-parser@4.0.1", "", { "dependencies": { "@smithy/querystring-parser": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/interface-datastore/interface-store": ["interface-store@6.0.3", "", {}, "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/weald/ms": ["ms@3.0.0-canary.1", "", {}, "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g=="], - - "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/weald/supports-color": ["supports-color@9.4.0", "", {}, "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw=="], - - "@grpc/proto-loader/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "@vanilla-extract/integration/find-up/locate-path/p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - - "aws-crt/mqtt/help-me/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "aws-crt/mqtt/mqtt-packet/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - - "yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - - "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw=="], - - "@vanilla-extract/integration/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - - "aws-crt/mqtt/help-me/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], - - "aws-crt/mqtt/mqtt-packet/bl/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - } -} diff --git a/cloud/LICENSE b/cloud/LICENSE deleted file mode 100644 index 6477b045..00000000 --- a/cloud/LICENSE +++ /dev/null @@ -1,42 +0,0 @@ -The Nestri Commercial License (the “Commercial License”) -Copyright (c) 2023-present Nestri Labs, Inc - -With regard to the Nestri Software: - -This software and associated documentation files (the "Software") may only be -used in production, if you (and any entity that you represent) have agreed to, -and are in compliance with, the Nestri Subscription Terms available -at https://nestri.io/terms, or other agreements governing -the use of the Software, as mutually agreed by you and Nestri Labs, Inc, -and otherwise have a valid Nestri Enterprise Edition subscription ("Commercial Subscription") -for the correct number of hosts as defined in the "Commercial Terms ("Hosts"). Subject to the foregoing sentence, -you are free to modify this Software and publish patches to the Software. You agree -that Nestri Labs and/or its licensors (as applicable) retain all right, title and interest in -and to all such modifications and/or patches, and all such modifications and/or -patches may only be used, copied, modified, displayed, distributed, or otherwise -exploited with a valid Commercial Subscription for the correct number of hosts. -Notwithstanding the foregoing, you may copy and modify the Software for development -and testing purposes, without requiring a subscription. You agree that Cal.com and/or -its licensors (as applicable) retain all right, title and interest in and to all such -modifications. You are not granted any other rights beyond what is expressly stated herein. -Subject to the foregoing, it is forbidden to copy, merge, publish, distribute, sublicense, -and/or sell the Software. - -This Commercial License applies only to the part of this Software that is not distributed under -the AGPLv3 license. Any part of this Software distributed under the MIT license or which -is served client-side as an image, font, cascading stylesheet (CSS), file which produces -or is compiled, arranged, augmented, or combined into client-side JavaScript, in whole or -in part, is copyrighted under the AGPLv3 license. The full text of this Commercial License shall -be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -For all third party components incorporated into the Nestri Software, those -components are licensed under the original license provided by the owner of the -applicable component. diff --git a/cloud/infra/api.ts b/cloud/infra/api.ts deleted file mode 100644 index 4a4f75f7..00000000 --- a/cloud/infra/api.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { urls } from "./urls"; -import { auth } from "./auth"; -import { domain } from "./stage"; -import { secret } from "./secrets"; -import { database } from "./database"; - -export const api = new sst.cloudflare.Worker("Api", { - url: true, - domain: `api.${domain}`, - handler: "cloud/packages/functions/src/api/index.ts", - link: [database, secret.POLAR_API_KEY, urls, auth], -}); diff --git a/cloud/infra/auth.ts b/cloud/infra/auth.ts deleted file mode 100644 index 9bb0b047..00000000 --- a/cloud/infra/auth.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { domain } from "./stage"; -import { secret } from "./secrets"; -import { database } from "./database"; - -const authStorage = new sst.cloudflare.Kv("AuthStorage"); - -export const auth = new sst.cloudflare.Worker("Auth", { - handler: "cloud/packages/functions/src/auth/index.ts", - domain: `auth.${domain}`, - url: true, - link: [ - database, - authStorage, - secret.POLAR_API_KEY, - secret.DISCORD_CLIENT_ID, - secret.DISCORD_CLIENT_SECRET, - ], - transform: { - worker: { - placement: { - mode: "smart", - }, - }, - }, -}); diff --git a/cloud/infra/database.ts b/cloud/infra/database.ts deleted file mode 100644 index 462853bd..00000000 --- a/cloud/infra/database.ts +++ /dev/null @@ -1,54 +0,0 @@ -const dbProject = neon.getProjectOutput({ - id: "curly-fire-59112557", -}); - -const dbBranchId = - $app.stage !== "production" - ? new neon.Branch("NeonBranch", { - parentId: dbProject.defaultBranchId, - projectId: dbProject.id, - name: $app.stage, - }).id - : dbProject.defaultBranchId; - -const dbEndpoint = new neon.Endpoint("NeonEndpoint", { - projectId: dbProject.id, - branchId: dbBranchId, - poolerEnabled: true, - type: "read_write", -}); - -const dbRole = new neon.Role("NeonRole", { - name: `nestri-${$app.stage}-role`, - branchId: dbBranchId, - projectId: dbProject.id, -}); - -const db = new neon.Database( - "NeonDatabase", - { - branchId: dbBranchId, - projectId: dbProject.id, - ownerName: dbRole.name, - name: `nestri-${$app.stage}`, - }, - { dependsOn: [dbRole] }, -); - -export const database = new sst.Linkable("Database", { - properties: { - name: db.name, - user: dbRole.name, - host: dbEndpoint.host, - password: dbRole.password, - }, -}); - -new sst.x.DevCommand("Studio", { - link: [database], - dev: { - command: "bun db studio", - directory: "cloud/packages/core", - autostart: true, - }, -}); diff --git a/cloud/infra/secrets.ts b/cloud/infra/secrets.ts deleted file mode 100644 index 1985a800..00000000 --- a/cloud/infra/secrets.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const secret = { - DISCORD_CLIENT_ID: new sst.Secret("DISCORD_CLIENT_ID"), - DISCORD_CLIENT_SECRET: new sst.Secret("DISCORD_CLIENT_SECRET"), - POLAR_API_KEY: new sst.Secret("POLAR_API_KEY"), -}; diff --git a/cloud/infra/stage.ts b/cloud/infra/stage.ts deleted file mode 100644 index 278766ec..00000000 --- a/cloud/infra/stage.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const domain = (() => { - if ($app.stage === "production") return "nestri.io" - if ($app.stage === "dev") return "dev.nestri.io" - return `${$app.stage}.dev.nestri.io` -})() diff --git a/cloud/infra/urls.ts b/cloud/infra/urls.ts deleted file mode 100644 index 8526c424..00000000 --- a/cloud/infra/urls.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { domain } from "./stage"; - -export const urls = new sst.Linkable("Urls", { - properties: { - api: "https://api." + domain, - auth: "https://auth." + domain, - site: $dev ? "http://localhost:4321" : "https://" + domain, - openapi: "https://api." + domain + "/doc", - }, -}); diff --git a/cloud/packages/core/drizzle.config.ts b/cloud/packages/core/drizzle.config.ts deleted file mode 100644 index 58649e5f..00000000 --- a/cloud/packages/core/drizzle.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Resource } from "sst"; -import { defineConfig } from "drizzle-kit"; - -export default defineConfig({ - verbose: true, - out: "./migrations", - dialect: "postgresql", - dbCredentials: { - url: `postgres://${Resource.Database.user}:${Resource.Database.password}@${Resource.Database.host}/${Resource.Database.name}?sslmode=require`, - }, - schema: "./src/**/*.sql.ts", -}); diff --git a/cloud/packages/core/migrations/0000_flaky_matthew_murdock.sql b/cloud/packages/core/migrations/0000_flaky_matthew_murdock.sql deleted file mode 100644 index 3b1dc142..00000000 --- a/cloud/packages/core/migrations/0000_flaky_matthew_murdock.sql +++ /dev/null @@ -1,39 +0,0 @@ -CREATE TABLE "member" ( - "id" char(30) NOT NULL, - "team_id" char(30) NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "time_seen" timestamp with time zone, - "email" varchar(255) NOT NULL, - CONSTRAINT "member_team_id_id_pk" PRIMARY KEY("team_id","id") -); ---> statement-breakpoint -CREATE TABLE "team" ( - "id" char(30) PRIMARY KEY NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "name" varchar(255) NOT NULL, - "slug" varchar(255) NOT NULL, - "plan_type" text NOT NULL -); ---> statement-breakpoint -CREATE TABLE "user" ( - "id" char(30) PRIMARY KEY NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "avatar_url" text, - "name" varchar(255) NOT NULL, - "discriminator" integer NOT NULL, - "email" varchar(255) NOT NULL, - "polar_customer_id" varchar(255), - "flags" json DEFAULT '{}'::json, - CONSTRAINT "user_polar_customer_id_unique" UNIQUE("polar_customer_id") -); ---> statement-breakpoint -CREATE INDEX "email_global" ON "member" USING btree ("email");--> statement-breakpoint -CREATE UNIQUE INDEX "member_email" ON "member" USING btree ("team_id","email");--> statement-breakpoint -CREATE UNIQUE INDEX "team_slug" ON "team" USING btree ("slug");--> statement-breakpoint -CREATE UNIQUE INDEX "user_email" ON "user" USING btree ("email"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0001_nifty_sauron.sql b/cloud/packages/core/migrations/0001_nifty_sauron.sql deleted file mode 100644 index 8ebf1c72..00000000 --- a/cloud/packages/core/migrations/0001_nifty_sauron.sql +++ /dev/null @@ -1,2 +0,0 @@ -DROP INDEX "team_slug";--> statement-breakpoint -CREATE UNIQUE INDEX "slug" ON "team" USING btree ("slug"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0002_simple_outlaw_kid.sql b/cloud/packages/core/migrations/0002_simple_outlaw_kid.sql deleted file mode 100644 index 63ea20b8..00000000 --- a/cloud/packages/core/migrations/0002_simple_outlaw_kid.sql +++ /dev/null @@ -1,17 +0,0 @@ -CREATE TABLE "steam" ( - "id" char(30) NOT NULL, - "user_id" char(30) NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "avatar_url" text NOT NULL, - "access_token" text NOT NULL, - "email" varchar(255) NOT NULL, - "country" varchar(255) NOT NULL, - "username" varchar(255) NOT NULL, - "persona_name" varchar(255) NOT NULL, - CONSTRAINT "steam_user_id_id_pk" PRIMARY KEY("user_id","id") -); ---> statement-breakpoint -CREATE INDEX "global_steam_email" ON "steam" USING btree ("email");--> statement-breakpoint -CREATE UNIQUE INDEX "steam_email" ON "steam" USING btree ("user_id","email"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0002_tiny_toad_men.sql b/cloud/packages/core/migrations/0002_tiny_toad_men.sql deleted file mode 100644 index 3e0ab3a3..00000000 --- a/cloud/packages/core/migrations/0002_tiny_toad_men.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE "machine" ( - "id" char(30) PRIMARY KEY NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "country" text NOT NULL, - "timezone" text NOT NULL, - "location" "point" NOT NULL, - "fingerprint" varchar(32) NOT NULL, - "country_code" varchar(2) NOT NULL -); ---> statement-breakpoint -CREATE UNIQUE INDEX "machine_fingerprint" ON "machine" USING btree ("fingerprint"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0003_first_big_bertha.sql b/cloud/packages/core/migrations/0003_first_big_bertha.sql deleted file mode 100644 index 6334333a..00000000 --- a/cloud/packages/core/migrations/0003_first_big_bertha.sql +++ /dev/null @@ -1,22 +0,0 @@ -CREATE TABLE "machine" ( - "id" char(30) PRIMARY KEY NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "country" text NOT NULL, - "timezone" text NOT NULL, - "location" "point" NOT NULL, - "fingerprint" varchar(32) NOT NULL, - "country_code" varchar(2) NOT NULL -); ---> statement-breakpoint -ALTER TABLE "steam" RENAME COLUMN "country" TO "country_code";--> statement-breakpoint -DROP INDEX "global_steam_email";--> statement-breakpoint -ALTER TABLE "steam" ADD COLUMN "time_seen" timestamp with time zone;--> statement-breakpoint -ALTER TABLE "steam" ADD COLUMN "steam_id" integer NOT NULL;--> statement-breakpoint -ALTER TABLE "steam" ADD COLUMN "last_game" json NOT NULL;--> statement-breakpoint -ALTER TABLE "steam" ADD COLUMN "steam_email" varchar(255) NOT NULL;--> statement-breakpoint -ALTER TABLE "steam" ADD COLUMN "limitation" json NOT NULL;--> statement-breakpoint -CREATE UNIQUE INDEX "machine_fingerprint" ON "machine" USING btree ("fingerprint");--> statement-breakpoint -ALTER TABLE "steam" DROP COLUMN "access_token";--> statement-breakpoint -ALTER TABLE "user" DROP COLUMN "flags"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0004_amused_mattie_franklin.sql b/cloud/packages/core/migrations/0004_amused_mattie_franklin.sql deleted file mode 100644 index ceb6f257..00000000 --- a/cloud/packages/core/migrations/0004_amused_mattie_franklin.sql +++ /dev/null @@ -1,8 +0,0 @@ -ALTER TABLE "steam" RENAME COLUMN "time_seen" TO "last_seen";--> statement-breakpoint -DROP INDEX "steam_email";--> statement-breakpoint -ALTER TABLE "steam" DROP CONSTRAINT "steam_user_id_id_pk";--> statement-breakpoint -ALTER TABLE "steam" ADD PRIMARY KEY ("id");--> statement-breakpoint -ALTER TABLE "machine" ADD CONSTRAINT "machine_user_id_id_pk" PRIMARY KEY("user_id","id");--> statement-breakpoint -ALTER TABLE "machine" ADD COLUMN "user_id" char(30);--> statement-breakpoint -ALTER TABLE "steam" ADD CONSTRAINT "steam_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "steam" DROP COLUMN "email"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0005_aspiring_stature.sql b/cloud/packages/core/migrations/0005_aspiring_stature.sql deleted file mode 100644 index 82ed2bf3..00000000 --- a/cloud/packages/core/migrations/0005_aspiring_stature.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE "machine" DROP CONSTRAINT "machine_user_id_id_pk";--> statement-breakpoint -ALTER TABLE "machine" DROP COLUMN "user_id"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0006_worthless_dreadnoughts.sql b/cloud/packages/core/migrations/0006_worthless_dreadnoughts.sql deleted file mode 100644 index cb39fb49..00000000 --- a/cloud/packages/core/migrations/0006_worthless_dreadnoughts.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE "member" ADD COLUMN "role" text NOT NULL;--> statement-breakpoint -ALTER TABLE "team" DROP COLUMN "plan_type"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0007_warm_secret_warriors.sql b/cloud/packages/core/migrations/0007_warm_secret_warriors.sql deleted file mode 100644 index 8612cced..00000000 --- a/cloud/packages/core/migrations/0007_warm_secret_warriors.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE "subscription" ( - "id" char(30) NOT NULL, - "user_id" char(30) NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "team_id" char(30) NOT NULL, - "standing" text NOT NULL, - "plan_type" text NOT NULL, - "tokens" integer NOT NULL, - "product_id" varchar(255), - "subscription_id" varchar(255) -); ---> statement-breakpoint -ALTER TABLE "subscription" ADD CONSTRAINT "subscription_team_id_team_id_fk" FOREIGN KEY ("team_id") REFERENCES "public"."team"("id") ON DELETE cascade ON UPDATE no action; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0008_third_mindworm.sql b/cloud/packages/core/migrations/0008_third_mindworm.sql deleted file mode 100644 index 3cb5d63f..00000000 --- a/cloud/packages/core/migrations/0008_third_mindworm.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE "subscription" ADD CONSTRAINT "subscription_id_team_id_pk" PRIMARY KEY("id","team_id");--> statement-breakpoint -CREATE UNIQUE INDEX "subscription_id" ON "subscription" USING btree ("id");--> statement-breakpoint -CREATE INDEX "subscription_user_id" ON "subscription" USING btree ("user_id"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0009_luxuriant_wraith.sql b/cloud/packages/core/migrations/0009_luxuriant_wraith.sql deleted file mode 100644 index 237df9eb..00000000 --- a/cloud/packages/core/migrations/0009_luxuriant_wraith.sql +++ /dev/null @@ -1,2 +0,0 @@ -CREATE UNIQUE INDEX "steam_id" ON "steam" USING btree ("steam_id");--> statement-breakpoint -CREATE INDEX "steam_user_id" ON "steam" USING btree ("user_id"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0010_certain_dust.sql b/cloud/packages/core/migrations/0010_certain_dust.sql deleted file mode 100644 index 1fc4ef18..00000000 --- a/cloud/packages/core/migrations/0010_certain_dust.sql +++ /dev/null @@ -1,94 +0,0 @@ -CREATE TYPE "public"."member_role" AS ENUM('child', 'adult');--> statement-breakpoint -CREATE TYPE "public"."steam_status" AS ENUM('online', 'offline', 'dnd', 'playing');--> statement-breakpoint -CREATE TABLE "steam_account_credentials" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "steam_id" varchar(255) PRIMARY KEY NOT NULL, - "refresh_token" text NOT NULL, - "expiry" timestamp with time zone NOT NULL, - "username" varchar(255) NOT NULL -); ---> statement-breakpoint -CREATE TABLE "friends_list" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "steam_id" varchar(255) NOT NULL, - "friend_steam_id" varchar(255) NOT NULL, - CONSTRAINT "friends_list_steam_id_friend_steam_id_pk" PRIMARY KEY("steam_id","friend_steam_id") -); ---> statement-breakpoint -CREATE TABLE "members" ( - "id" char(30) NOT NULL, - "team_id" char(30) NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "user_id" char(30), - "steam_id" varchar(255) NOT NULL, - "role" "member_role" NOT NULL, - CONSTRAINT "members_id_team_id_pk" PRIMARY KEY("id","team_id") -); ---> statement-breakpoint -CREATE TABLE "steam_accounts" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "steam_id" varchar(255) PRIMARY KEY NOT NULL, - "user_id" char(30), - "status" "steam_status" NOT NULL, - "last_synced_at" timestamp with time zone NOT NULL, - "real_name" varchar(255), - "member_since" timestamp with time zone NOT NULL, - "name" varchar(255) NOT NULL, - "profile_url" varchar(255), - "username" varchar(255) NOT NULL, - "avatar_hash" varchar(255) NOT NULL, - "limitations" json NOT NULL, - CONSTRAINT "idx_steam_username" UNIQUE("username") -); ---> statement-breakpoint -CREATE TABLE "teams" ( - "id" char(30) PRIMARY KEY NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "name" varchar(255) NOT NULL, - "owner_id" char(30) NOT NULL, - "invite_code" varchar(10) NOT NULL, - "slug" varchar(255) NOT NULL, - "max_members" bigint NOT NULL, - CONSTRAINT "idx_team_invite_code" UNIQUE("invite_code") -); ---> statement-breakpoint -CREATE TABLE "users" ( - "id" char(30) PRIMARY KEY NOT NULL, - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "email" varchar(255) NOT NULL, - "avatar_url" text, - "last_login" timestamp with time zone NOT NULL, - "name" varchar(255) NOT NULL, - "polar_customer_id" varchar(255), - CONSTRAINT "idx_user_email" UNIQUE("email") -); ---> statement-breakpoint -DROP TABLE "machine" CASCADE;--> statement-breakpoint -DROP TABLE "member" CASCADE;--> statement-breakpoint -DROP TABLE "steam" CASCADE;--> statement-breakpoint -DROP TABLE "subscription" CASCADE;--> statement-breakpoint -DROP TABLE "team" CASCADE;--> statement-breakpoint -DROP TABLE "user" CASCADE;--> statement-breakpoint -ALTER TABLE "steam_account_credentials" ADD CONSTRAINT "steam_account_credentials_steam_id_steam_accounts_steam_id_fk" FOREIGN KEY ("steam_id") REFERENCES "public"."steam_accounts"("steam_id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "friends_list" ADD CONSTRAINT "friends_list_steam_id_steam_accounts_steam_id_fk" FOREIGN KEY ("steam_id") REFERENCES "public"."steam_accounts"("steam_id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "friends_list" ADD CONSTRAINT "friends_list_friend_steam_id_steam_accounts_steam_id_fk" FOREIGN KEY ("friend_steam_id") REFERENCES "public"."steam_accounts"("steam_id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "members" ADD CONSTRAINT "members_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "members" ADD CONSTRAINT "members_steam_id_steam_accounts_steam_id_fk" FOREIGN KEY ("steam_id") REFERENCES "public"."steam_accounts"("steam_id") ON DELETE cascade ON UPDATE restrict;--> statement-breakpoint -ALTER TABLE "steam_accounts" ADD CONSTRAINT "steam_accounts_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "teams" ADD CONSTRAINT "teams_owner_id_users_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "teams" ADD CONSTRAINT "teams_slug_steam_accounts_username_fk" FOREIGN KEY ("slug") REFERENCES "public"."steam_accounts"("username") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE UNIQUE INDEX "idx_member_steam_id" ON "members" USING btree ("team_id","steam_id");--> statement-breakpoint -CREATE UNIQUE INDEX "idx_member_user_id" ON "members" USING btree ("team_id","user_id") WHERE "members"."user_id" is not null;--> statement-breakpoint -CREATE UNIQUE INDEX "idx_team_slug" ON "teams" USING btree ("slug"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0011_simple_azazel.sql b/cloud/packages/core/migrations/0011_simple_azazel.sql deleted file mode 100644 index 4edad2f1..00000000 --- a/cloud/packages/core/migrations/0011_simple_azazel.sql +++ /dev/null @@ -1,89 +0,0 @@ -CREATE TYPE "public"."compatibility" AS ENUM('high', 'mid', 'low', 'unknown');--> statement-breakpoint -CREATE TYPE "public"."category_type" AS ENUM('tag', 'genre', 'publisher', 'developer');--> statement-breakpoint -CREATE TYPE "public"."image_type" AS ENUM('heroArt', 'icon', 'logo', 'superHeroArt', 'poster', 'boxArt', 'screenshot', 'background');--> statement-breakpoint -CREATE TABLE "base_games" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "id" varchar(255) PRIMARY KEY NOT NULL, - "slug" varchar(255) NOT NULL, - "name" text NOT NULL, - "release_date" timestamp with time zone NOT NULL, - "size" json NOT NULL, - "description" text NOT NULL, - "primary_genre" text NOT NULL, - "controller_support" text, - "compatibility" "compatibility" DEFAULT 'unknown' NOT NULL, - "score" numeric(2, 1) NOT NULL, - CONSTRAINT "idx_base_games_slug" UNIQUE("slug") -); ---> statement-breakpoint -CREATE TABLE "categories" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "slug" varchar(255) NOT NULL, - "type" "category_type" NOT NULL, - "name" text NOT NULL, - CONSTRAINT "categories_slug_type_pk" PRIMARY KEY("slug","type") -); ---> statement-breakpoint -CREATE TABLE "games" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "base_game_id" varchar(255) NOT NULL, - "category_slug" varchar(255) NOT NULL, - "type" "category_type" NOT NULL, - CONSTRAINT "games_base_game_id_category_slug_type_pk" PRIMARY KEY("base_game_id","category_slug","type") -); ---> statement-breakpoint -CREATE TABLE "images" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "type" "image_type" NOT NULL, - "image_hash" varchar(255) NOT NULL, - "base_game_id" varchar(255) NOT NULL, - "source_url" text NOT NULL, - "position" integer DEFAULT 0 NOT NULL, - "file_size" integer NOT NULL, - "dimensions" json NOT NULL, - "extracted_color" json NOT NULL, - CONSTRAINT "images_image_hash_type_base_game_id_position_pk" PRIMARY KEY("image_hash","type","base_game_id","position") -); ---> statement-breakpoint -CREATE TABLE "game_libraries" ( - "time_created" timestamp with time zone DEFAULT now() NOT NULL, - "time_updated" timestamp with time zone DEFAULT now() NOT NULL, - "time_deleted" timestamp with time zone, - "base_game_id" varchar(255) NOT NULL, - "owner_id" varchar(255) NOT NULL, - CONSTRAINT "game_libraries_base_game_id_owner_id_pk" PRIMARY KEY("base_game_id","owner_id") -); ---> statement-breakpoint -ALTER TABLE "steam_accounts" RENAME COLUMN "steam_id" TO "id";--> statement-breakpoint -ALTER TABLE "steam_account_credentials" DROP CONSTRAINT "steam_account_credentials_steam_id_steam_accounts_steam_id_fk"; ---> statement-breakpoint -ALTER TABLE "friends_list" DROP CONSTRAINT "friends_list_steam_id_steam_accounts_steam_id_fk"; ---> statement-breakpoint -ALTER TABLE "friends_list" DROP CONSTRAINT "friends_list_friend_steam_id_steam_accounts_steam_id_fk"; ---> statement-breakpoint -ALTER TABLE "members" DROP CONSTRAINT "members_steam_id_steam_accounts_steam_id_fk"; ---> statement-breakpoint -ALTER TABLE "games" ADD CONSTRAINT "games_base_game_id_base_games_id_fk" FOREIGN KEY ("base_game_id") REFERENCES "public"."base_games"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "games" ADD CONSTRAINT "games_categories_fkey" FOREIGN KEY ("category_slug","type") REFERENCES "public"."categories"("slug","type") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "images" ADD CONSTRAINT "images_base_game_id_base_games_id_fk" FOREIGN KEY ("base_game_id") REFERENCES "public"."base_games"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "game_libraries" ADD CONSTRAINT "game_libraries_base_game_id_base_games_id_fk" FOREIGN KEY ("base_game_id") REFERENCES "public"."base_games"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "game_libraries" ADD CONSTRAINT "game_libraries_owner_id_steam_accounts_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX "idx_categories_type" ON "categories" USING btree ("type");--> statement-breakpoint -CREATE INDEX "idx_games_category_slug" ON "games" USING btree ("category_slug");--> statement-breakpoint -CREATE INDEX "idx_games_category_type" ON "games" USING btree ("type");--> statement-breakpoint -CREATE INDEX "idx_images_type" ON "images" USING btree ("type");--> statement-breakpoint -CREATE INDEX "idx_images_game_id" ON "images" USING btree ("base_game_id");--> statement-breakpoint -CREATE INDEX "idx_game_libraries_owner_id" ON "game_libraries" USING btree ("owner_id");--> statement-breakpoint -ALTER TABLE "steam_account_credentials" ADD CONSTRAINT "steam_account_credentials_steam_id_steam_accounts_id_fk" FOREIGN KEY ("steam_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "friends_list" ADD CONSTRAINT "friends_list_steam_id_steam_accounts_id_fk" FOREIGN KEY ("steam_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "friends_list" ADD CONSTRAINT "friends_list_friend_steam_id_steam_accounts_id_fk" FOREIGN KEY ("friend_steam_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "members" ADD CONSTRAINT "members_steam_id_steam_accounts_id_fk" FOREIGN KEY ("steam_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE restrict;--> statement-breakpoint -CREATE INDEX "idx_friends_list_friend_steam_id" ON "friends_list" USING btree ("friend_steam_id"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0012_glorious_jetstream.sql b/cloud/packages/core/migrations/0012_glorious_jetstream.sql deleted file mode 100644 index 5e8d92b4..00000000 --- a/cloud/packages/core/migrations/0012_glorious_jetstream.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE "games" DROP CONSTRAINT "games_categories_fkey"; ---> statement-breakpoint -ALTER TABLE "games" ADD CONSTRAINT "games_categories_fkey" FOREIGN KEY ("category_slug","type") REFERENCES "public"."categories"("slug","type") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX "idx_games_category_slug_type" ON "games" USING btree ("category_slug","type"); \ No newline at end of file diff --git a/cloud/packages/core/migrations/0013_neat_colleen_wing.sql b/cloud/packages/core/migrations/0013_neat_colleen_wing.sql deleted file mode 100644 index 0b7c5d60..00000000 --- a/cloud/packages/core/migrations/0013_neat_colleen_wing.sql +++ /dev/null @@ -1,3 +0,0 @@ -CREATE TYPE "public"."controller_support" AS ENUM('full', 'unknown');--> statement-breakpoint -ALTER TABLE "base_games" ALTER COLUMN "controller_support" SET DATA TYPE controller_support;--> statement-breakpoint -ALTER TABLE "base_games" ALTER COLUMN "controller_support" SET NOT NULL; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0014_thin_groot.sql b/cloud/packages/core/migrations/0014_thin_groot.sql deleted file mode 100644 index 71f7ef74..00000000 --- a/cloud/packages/core/migrations/0014_thin_groot.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "base_games" ALTER COLUMN "primary_genre" DROP NOT NULL; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0015_handy_giant_man.sql b/cloud/packages/core/migrations/0015_handy_giant_man.sql deleted file mode 100644 index 1536ed59..00000000 --- a/cloud/packages/core/migrations/0015_handy_giant_man.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TYPE "public"."controller_support" ADD VALUE 'partial' BEFORE 'unknown'; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0016_melted_johnny_storm.sql b/cloud/packages/core/migrations/0016_melted_johnny_storm.sql deleted file mode 100644 index 0c180622..00000000 --- a/cloud/packages/core/migrations/0016_melted_johnny_storm.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE "game_libraries" ADD COLUMN "time_acquired" timestamp with time zone NOT NULL;--> statement-breakpoint -ALTER TABLE "game_libraries" ADD COLUMN "last_played" timestamp with time zone NOT NULL;--> statement-breakpoint -ALTER TABLE "game_libraries" ADD COLUMN "total_playtime" integer NOT NULL;--> statement-breakpoint -ALTER TABLE "game_libraries" ADD COLUMN "is_family_shared" boolean NOT NULL; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0017_zippy_nico_minoru.sql b/cloud/packages/core/migrations/0017_zippy_nico_minoru.sql deleted file mode 100644 index 61c365c2..00000000 --- a/cloud/packages/core/migrations/0017_zippy_nico_minoru.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE "public"."images" ALTER COLUMN "type" SET DATA TYPE text;--> statement-breakpoint -DROP TYPE "public"."image_type";--> statement-breakpoint -CREATE TYPE "public"."image_type" AS ENUM('heroArt', 'icon', 'logo', 'superHeroArt', 'poster', 'boxArt', 'screenshot', 'backdrop');--> statement-breakpoint -ALTER TABLE "public"."images" ALTER COLUMN "type" SET DATA TYPE "public"."image_type" USING "type"::"public"."image_type"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0018_solid_enchantress.sql b/cloud/packages/core/migrations/0018_solid_enchantress.sql deleted file mode 100644 index 5d08f270..00000000 --- a/cloud/packages/core/migrations/0018_solid_enchantress.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE "public"."images" ALTER COLUMN "type" SET DATA TYPE text;--> statement-breakpoint -DROP TYPE "public"."image_type";--> statement-breakpoint -CREATE TYPE "public"."image_type" AS ENUM('heroArt', 'icon', 'logo', 'banner', 'poster', 'boxArt', 'screenshot', 'backdrop');--> statement-breakpoint -ALTER TABLE "public"."images" ALTER COLUMN "type" SET DATA TYPE "public"."image_type" USING "type"::"public"."image_type"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0019_charming_namorita.sql b/cloud/packages/core/migrations/0019_charming_namorita.sql deleted file mode 100644 index 218a6fb8..00000000 --- a/cloud/packages/core/migrations/0019_charming_namorita.sql +++ /dev/null @@ -1,19 +0,0 @@ -/* - Unfortunately in current drizzle-kit version we can't automatically get name for primary key. - We are working on making it available! - - Meanwhile you can: - 1. Check pk name in your database, by running - SELECT constraint_name FROM information_schema.table_constraints - WHERE table_schema = 'public' - AND table_name = 'steam_account_credentials' - AND constraint_type = 'PRIMARY KEY'; - 2. Uncomment code below and paste pk name manually - - Hope to release this update as soon as possible -*/ - --- ALTER TABLE "steam_account_credentials" DROP CONSTRAINT "";--> statement-breakpoint -ALTER TABLE "images" ALTER COLUMN "source_url" DROP NOT NULL;--> statement-breakpoint -ALTER TABLE "steam_account_credentials" ADD CONSTRAINT "steam_account_credentials_steam_id_id_pk" PRIMARY KEY("steam_id","id");--> statement-breakpoint -ALTER TABLE "steam_account_credentials" ADD COLUMN "id" char(30) NOT NULL; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0020_vengeful_wallop.sql b/cloud/packages/core/migrations/0020_vengeful_wallop.sql deleted file mode 100644 index d066e719..00000000 --- a/cloud/packages/core/migrations/0020_vengeful_wallop.sql +++ /dev/null @@ -1,23 +0,0 @@ -ALTER TABLE "steam_account_credentials" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint -DROP TABLE "steam_account_credentials" CASCADE;--> statement-breakpoint -ALTER TABLE "game_libraries" RENAME COLUMN "owner_id" TO "owner_steam_id";--> statement-breakpoint -ALTER TABLE "teams" RENAME COLUMN "owner_id" TO "owner_steam_id";--> statement-breakpoint -ALTER TABLE "steam_accounts" DROP CONSTRAINT "idx_steam_username";--> statement-breakpoint -ALTER TABLE "game_libraries" DROP CONSTRAINT "game_libraries_owner_id_steam_accounts_id_fk"; ---> statement-breakpoint -ALTER TABLE "teams" DROP CONSTRAINT "teams_owner_id_users_id_fk"; ---> statement-breakpoint -ALTER TABLE "teams" DROP CONSTRAINT "teams_slug_steam_accounts_username_fk"; ---> statement-breakpoint -DROP INDEX "idx_team_slug";--> statement-breakpoint -DROP INDEX "idx_game_libraries_owner_id";--> statement-breakpoint -ALTER TABLE "game_libraries" DROP CONSTRAINT "game_libraries_base_game_id_owner_id_pk";--> statement-breakpoint -ALTER TABLE "game_libraries" ALTER COLUMN "last_played" DROP NOT NULL;--> statement-breakpoint -ALTER TABLE "game_libraries" ADD CONSTRAINT "game_libraries_base_game_id_owner_steam_id_pk" PRIMARY KEY("base_game_id","owner_steam_id");--> statement-breakpoint -ALTER TABLE "game_libraries" ADD CONSTRAINT "game_libraries_owner_steam_id_steam_accounts_id_fk" FOREIGN KEY ("owner_steam_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "teams" ADD CONSTRAINT "teams_owner_steam_id_steam_accounts_id_fk" FOREIGN KEY ("owner_steam_id") REFERENCES "public"."steam_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX "idx_game_libraries_owner_id" ON "game_libraries" USING btree ("owner_steam_id");--> statement-breakpoint -ALTER TABLE "game_libraries" DROP COLUMN "time_acquired";--> statement-breakpoint -ALTER TABLE "game_libraries" DROP COLUMN "is_family_shared";--> statement-breakpoint -ALTER TABLE "steam_accounts" DROP COLUMN "username";--> statement-breakpoint -ALTER TABLE "teams" DROP COLUMN "slug"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0021_real_skreet.sql b/cloud/packages/core/migrations/0021_real_skreet.sql deleted file mode 100644 index 142a7891..00000000 --- a/cloud/packages/core/migrations/0021_real_skreet.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TYPE "public"."category_type" ADD VALUE 'category';--> statement-breakpoint -ALTER TYPE "public"."category_type" ADD VALUE 'franchise'; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0022_clean_living_lightning.sql b/cloud/packages/core/migrations/0022_clean_living_lightning.sql deleted file mode 100644 index 3c82179e..00000000 --- a/cloud/packages/core/migrations/0022_clean_living_lightning.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE "public"."categories" ALTER COLUMN "type" SET DATA TYPE text;--> statement-breakpoint -ALTER TABLE "public"."games" ALTER COLUMN "type" SET DATA TYPE text;--> statement-breakpoint -DROP TYPE "public"."category_type";--> statement-breakpoint -CREATE TYPE "public"."category_type" AS ENUM('tag', 'genre', 'publisher', 'developer', 'categorie', 'franchise');--> statement-breakpoint -ALTER TABLE "public"."categories" ALTER COLUMN "type" SET DATA TYPE "public"."category_type" USING "type"::"public"."category_type";--> statement-breakpoint -ALTER TABLE "public"."games" ALTER COLUMN "type" SET DATA TYPE "public"."category_type" USING "type"::"public"."category_type"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0023_flawless_steel_serpent.sql b/cloud/packages/core/migrations/0023_flawless_steel_serpent.sql deleted file mode 100644 index e2d42b79..00000000 --- a/cloud/packages/core/migrations/0023_flawless_steel_serpent.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE "base_games" ALTER COLUMN "description" DROP NOT NULL;--> statement-breakpoint -ALTER TABLE "base_games" ADD COLUMN "links" text[]; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0024_damp_cerise.sql b/cloud/packages/core/migrations/0024_damp_cerise.sql deleted file mode 100644 index 4b60db3f..00000000 --- a/cloud/packages/core/migrations/0024_damp_cerise.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "base_games" ALTER COLUMN "links" SET DATA TYPE json; \ No newline at end of file diff --git a/cloud/packages/core/migrations/0025_bitter_jack_flag.sql b/cloud/packages/core/migrations/0025_bitter_jack_flag.sql deleted file mode 100644 index 9d93dcfe..00000000 --- a/cloud/packages/core/migrations/0025_bitter_jack_flag.sql +++ /dev/null @@ -1,3 +0,0 @@ -DROP TABLE "members" CASCADE;--> statement-breakpoint -DROP TABLE "teams" CASCADE;--> statement-breakpoint -DROP TYPE "public"."member_role"; \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0000_snapshot.json b/cloud/packages/core/migrations/meta/0000_snapshot.json deleted file mode 100644 index 879642c5..00000000 --- a/cloud/packages/core/migrations/meta/0000_snapshot.json +++ /dev/null @@ -1,294 +0,0 @@ -{ - "id": "f09034df-208a-42b3-b61f-f842921c6e24", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "team_slug": { - "name": "team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "flags": { - "name": "flags", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'{}'::json" - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0001_snapshot.json b/cloud/packages/core/migrations/meta/0001_snapshot.json deleted file mode 100644 index 2bd4d991..00000000 --- a/cloud/packages/core/migrations/meta/0001_snapshot.json +++ /dev/null @@ -1,294 +0,0 @@ -{ - "id": "6f428226-b5d8-4182-a676-d04f842f9ded", - "prevId": "f09034df-208a-42b3-b61f-f842921c6e24", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "flags": { - "name": "flags", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'{}'::json" - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0002_snapshot.json b/cloud/packages/core/migrations/meta/0002_snapshot.json deleted file mode 100644 index 24062937..00000000 --- a/cloud/packages/core/migrations/meta/0002_snapshot.json +++ /dev/null @@ -1,420 +0,0 @@ -{ - "id": "227c54d2-b643-48d5-964b-af6fe004369a", - "prevId": "6f428226-b5d8-4182-a676-d04f842f9ded", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country": { - "name": "country", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "global_steam_email": { - "name": "global_steam_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "steam_email": { - "name": "steam_email", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "steam_user_id_id_pk": { - "name": "steam_user_id_id_pk", - "columns": [ - "user_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "flags": { - "name": "flags", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'{}'::json" - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0003_snapshot.json b/cloud/packages/core/migrations/meta/0003_snapshot.json deleted file mode 100644 index 7c047fb5..00000000 --- a/cloud/packages/core/migrations/meta/0003_snapshot.json +++ /dev/null @@ -1,507 +0,0 @@ -{ - "id": "eb5d41aa-5f85-4b2d-8633-fc021b211241", - "prevId": "227c54d2-b643-48d5-964b-af6fe004369a", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "steam_email": { - "name": "steam_email", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "steam_user_id_id_pk": { - "name": "steam_user_id_id_pk", - "columns": [ - "user_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0004_snapshot.json b/cloud/packages/core/migrations/meta/0004_snapshot.json deleted file mode 100644 index 46cbc479..00000000 --- a/cloud/packages/core/migrations/meta/0004_snapshot.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "id": "65574f71-e0d3-4363-9449-394e7c376a30", - "prevId": "eb5d41aa-5f85-4b2d-8633-fc021b211241", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "machine_user_id_id_pk": { - "name": "machine_user_id_id_pk", - "columns": [ - "user_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_user_id_user_id_fk": { - "name": "steam_user_id_user_id_fk", - "tableFrom": "steam", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0005_snapshot.json b/cloud/packages/core/migrations/meta/0005_snapshot.json deleted file mode 100644 index 25eb1842..00000000 --- a/cloud/packages/core/migrations/meta/0005_snapshot.json +++ /dev/null @@ -1,485 +0,0 @@ -{ - "id": "0b04858c-a7e3-43b6-98a4-1dc2f6f97488", - "prevId": "65574f71-e0d3-4363-9449-394e7c376a30", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_user_id_user_id_fk": { - "name": "steam_user_id_user_id_fk", - "tableFrom": "steam", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0006_snapshot.json b/cloud/packages/core/migrations/meta/0006_snapshot.json deleted file mode 100644 index 4701535c..00000000 --- a/cloud/packages/core/migrations/meta/0006_snapshot.json +++ /dev/null @@ -1,485 +0,0 @@ -{ - "id": "69827225-1351-4709-a9b2-facb0f569215", - "prevId": "0b04858c-a7e3-43b6-98a4-1dc2f6f97488", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_user_id_user_id_fk": { - "name": "steam_user_id_user_id_fk", - "tableFrom": "steam", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0007_snapshot.json b/cloud/packages/core/migrations/meta/0007_snapshot.json deleted file mode 100644 index 2b428c99..00000000 --- a/cloud/packages/core/migrations/meta/0007_snapshot.json +++ /dev/null @@ -1,580 +0,0 @@ -{ - "id": "fff2b73d-85ab-48bc-86de-69d3caf317f0", - "prevId": "69827225-1351-4709-a9b2-facb0f569215", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_user_id_user_id_fk": { - "name": "steam_user_id_user_id_fk", - "tableFrom": "steam", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.subscription": { - "name": "subscription", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "standing": { - "name": "standing", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tokens": { - "name": "tokens", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "product_id": { - "name": "product_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "subscription_id": { - "name": "subscription_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "subscription_team_id_team_id_fk": { - "name": "subscription_team_id_team_id_fk", - "tableFrom": "subscription", - "tableTo": "team", - "columnsFrom": [ - "team_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0008_snapshot.json b/cloud/packages/core/migrations/meta/0008_snapshot.json deleted file mode 100644 index 3d99e948..00000000 --- a/cloud/packages/core/migrations/meta/0008_snapshot.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "id": "17b9c14f-ff15-44a5-9aaf-3f3b7dd7d294", - "prevId": "fff2b73d-85ab-48bc-86de-69d3caf317f0", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_user_id_user_id_fk": { - "name": "steam_user_id_user_id_fk", - "tableFrom": "steam", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.subscription": { - "name": "subscription", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "standing": { - "name": "standing", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tokens": { - "name": "tokens", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "product_id": { - "name": "product_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "subscription_id": { - "name": "subscription_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "subscription_id": { - "name": "subscription_id", - "columns": [ - { - "expression": "id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "subscription_user_id": { - "name": "subscription_user_id", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "subscription_team_id_team_id_fk": { - "name": "subscription_team_id_team_id_fk", - "tableFrom": "subscription", - "tableTo": "team", - "columnsFrom": [ - "team_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "subscription_id_team_id_pk": { - "name": "subscription_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0009_snapshot.json b/cloud/packages/core/migrations/meta/0009_snapshot.json deleted file mode 100644 index ceabafea..00000000 --- a/cloud/packages/core/migrations/meta/0009_snapshot.json +++ /dev/null @@ -1,650 +0,0 @@ -{ - "id": "1717c769-cee0-4242-bcbb-9538c80d985c", - "prevId": "17b9c14f-ff15-44a5-9aaf-3f3b7dd7d294", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.machine": { - "name": "machine", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "location": { - "name": "location", - "type": "point", - "primaryKey": false, - "notNull": true - }, - "fingerprint": { - "name": "fingerprint", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "machine_fingerprint": { - "name": "machine_fingerprint", - "columns": [ - { - "expression": "fingerprint", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "time_seen": { - "name": "time_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "email_global": { - "name": "email_global", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_email": { - "name": "member_email", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "member_team_id_id_pk": { - "name": "member_team_id_id_pk", - "columns": [ - "team_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam": { - "name": "steam", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_game": { - "name": "last_game", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "country_code": { - "name": "country_code", - "type": "varchar(2)", - "primaryKey": false, - "notNull": true - }, - "steam_email": { - "name": "steam_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "persona_name": { - "name": "persona_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitation": { - "name": "limitation", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "steam_id": { - "name": "steam_id", - "columns": [ - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "steam_user_id": { - "name": "steam_user_id", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "steam_user_id_user_id_fk": { - "name": "steam_user_id_user_id_fk", - "tableFrom": "steam", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.subscription": { - "name": "subscription", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "standing": { - "name": "standing", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "plan_type": { - "name": "plan_type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tokens": { - "name": "tokens", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "product_id": { - "name": "product_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "subscription_id": { - "name": "subscription_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "subscription_id": { - "name": "subscription_id", - "columns": [ - { - "expression": "id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "subscription_user_id": { - "name": "subscription_user_id", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "subscription_team_id_team_id_fk": { - "name": "subscription_team_id_team_id_fk", - "tableFrom": "subscription", - "tableTo": "team", - "columnsFrom": [ - "team_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "subscription_id_team_id_pk": { - "name": "subscription_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.team": { - "name": "team", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "slug": { - "name": "slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "discriminator": { - "name": "discriminator", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "user_email": { - "name": "user_email", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_polar_customer_id_unique": { - "name": "user_polar_customer_id_unique", - "nullsNotDistinct": false, - "columns": [ - "polar_customer_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0010_snapshot.json b/cloud/packages/core/migrations/meta/0010_snapshot.json deleted file mode 100644 index 3c47b9e6..00000000 --- a/cloud/packages/core/migrations/meta/0010_snapshot.json +++ /dev/null @@ -1,651 +0,0 @@ -{ - "id": "56a4d60a-c062-47e5-a97e-625443411ad8", - "prevId": "1717c769-cee0-4242-bcbb-9538c80d985c", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_steam_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_steam_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "steam_id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_steam_id_fk": { - "name": "friends_list_steam_id_steam_accounts_steam_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "steam_id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_steam_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_steam_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "steam_id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_steam_id_fk": { - "name": "members_steam_id_steam_accounts_steam_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "steam_id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0011_snapshot.json b/cloud/packages/core/migrations/meta/0011_snapshot.json deleted file mode 100644 index 3e3be95f..00000000 --- a/cloud/packages/core/migrations/meta/0011_snapshot.json +++ /dev/null @@ -1,1235 +0,0 @@ -{ - "id": "c2c3c086-1b84-417e-96f3-1651a026dbaa", - "prevId": "56a4d60a-c062-47e5-a97e-625443411ad8", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "controller_support": { - "name": "controller_support", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "background" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0012_snapshot.json b/cloud/packages/core/migrations/meta/0012_snapshot.json deleted file mode 100644 index 12e6d97c..00000000 --- a/cloud/packages/core/migrations/meta/0012_snapshot.json +++ /dev/null @@ -1,1256 +0,0 @@ -{ - "id": "84625b17-0a15-4d45-a32d-b0791ab07c92", - "prevId": "c2c3c086-1b84-417e-96f3-1651a026dbaa", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "controller_support": { - "name": "controller_support", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "background" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0013_snapshot.json b/cloud/packages/core/migrations/meta/0013_snapshot.json deleted file mode 100644 index 73971a59..00000000 --- a/cloud/packages/core/migrations/meta/0013_snapshot.json +++ /dev/null @@ -1,1265 +0,0 @@ -{ - "id": "ac06d391-f715-4643-9952-e992ec14a2a3", - "prevId": "84625b17-0a15-4d45-a32d-b0791ab07c92", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "background" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0014_snapshot.json b/cloud/packages/core/migrations/meta/0014_snapshot.json deleted file mode 100644 index 47ef74da..00000000 --- a/cloud/packages/core/migrations/meta/0014_snapshot.json +++ /dev/null @@ -1,1265 +0,0 @@ -{ - "id": "2b8ac73f-3308-4f80-b410-4b3192af6d67", - "prevId": "ac06d391-f715-4643-9952-e992ec14a2a3", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "background" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0015_snapshot.json b/cloud/packages/core/migrations/meta/0015_snapshot.json deleted file mode 100644 index 93026629..00000000 --- a/cloud/packages/core/migrations/meta/0015_snapshot.json +++ /dev/null @@ -1,1266 +0,0 @@ -{ - "id": "4a4314df-d580-41fd-b042-c9d5aa6b5e32", - "prevId": "2b8ac73f-3308-4f80-b410-4b3192af6d67", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "background" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0016_snapshot.json b/cloud/packages/core/migrations/meta/0016_snapshot.json deleted file mode 100644 index 35921ee4..00000000 --- a/cloud/packages/core/migrations/meta/0016_snapshot.json +++ /dev/null @@ -1,1290 +0,0 @@ -{ - "id": "33047c3a-85e6-4e9c-8707-286eb701d3c4", - "prevId": "4a4314df-d580-41fd-b042-c9d5aa6b5e32", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "time_acquired": { - "name": "time_acquired", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "is_family_shared": { - "name": "is_family_shared", - "type": "boolean", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "background" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0017_snapshot.json b/cloud/packages/core/migrations/meta/0017_snapshot.json deleted file mode 100644 index 3aef72a6..00000000 --- a/cloud/packages/core/migrations/meta/0017_snapshot.json +++ /dev/null @@ -1,1290 +0,0 @@ -{ - "id": "a770b048-94b6-4806-bbd0-1b50b7aee620", - "prevId": "33047c3a-85e6-4e9c-8707-286eb701d3c4", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "time_acquired": { - "name": "time_acquired", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "is_family_shared": { - "name": "is_family_shared", - "type": "boolean", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "superHeroArt", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0018_snapshot.json b/cloud/packages/core/migrations/meta/0018_snapshot.json deleted file mode 100644 index 88b80659..00000000 --- a/cloud/packages/core/migrations/meta/0018_snapshot.json +++ /dev/null @@ -1,1290 +0,0 @@ -{ - "id": "fd35ebac-13e6-4e76-8da7-e0aad3ce6b82", - "prevId": "a770b048-94b6-4806-bbd0-1b50b7aee620", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "time_acquired": { - "name": "time_acquired", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "is_family_shared": { - "name": "is_family_shared", - "type": "boolean", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0019_snapshot.json b/cloud/packages/core/migrations/meta/0019_snapshot.json deleted file mode 100644 index fea8466e..00000000 --- a/cloud/packages/core/migrations/meta/0019_snapshot.json +++ /dev/null @@ -1,1304 +0,0 @@ -{ - "id": "dc82780b-e403-4f48-8bf1-5b71291d77d8", - "prevId": "fd35ebac-13e6-4e76-8da7-e0aad3ce6b82", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_account_credentials": { - "name": "steam_account_credentials", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiry": { - "name": "expiry", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_account_credentials_steam_id_steam_accounts_id_fk": { - "name": "steam_account_credentials_steam_id_steam_accounts_id_fk", - "tableFrom": "steam_account_credentials", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "steam_account_credentials_steam_id_id_pk": { - "name": "steam_account_credentials_steam_id_id_pk", - "columns": [ - "steam_id", - "id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "time_acquired": { - "name": "time_acquired", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "is_family_shared": { - "name": "is_family_shared", - "type": "boolean", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_id_pk": { - "name": "game_libraries_base_game_id_owner_id_pk", - "columns": [ - "base_game_id", - "owner_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_steam_username": { - "name": "idx_steam_username", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_id": { - "name": "owner_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_team_slug": { - "name": "idx_team_slug", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "teams_owner_id_users_id_fk": { - "name": "teams_owner_id_users_id_fk", - "tableFrom": "teams", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "teams_slug_steam_accounts_username_fk": { - "name": "teams_slug_steam_accounts_username_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "slug" - ], - "columnsTo": [ - "username" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0020_snapshot.json b/cloud/packages/core/migrations/meta/0020_snapshot.json deleted file mode 100644 index 094f53d2..00000000 --- a/cloud/packages/core/migrations/meta/0020_snapshot.json +++ /dev/null @@ -1,1158 +0,0 @@ -{ - "id": "4312f388-81e7-4b19-a9ca-cca92004aaa6", - "prevId": "dc82780b-e403-4f48-8bf1-5b71291d77d8", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_steam_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_steam_id_pk": { - "name": "game_libraries_base_game_id_owner_steam_id_pk", - "columns": [ - "base_game_id", - "owner_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "teams_owner_steam_id_steam_accounts_id_fk": { - "name": "teams_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0021_snapshot.json b/cloud/packages/core/migrations/meta/0021_snapshot.json deleted file mode 100644 index 90115574..00000000 --- a/cloud/packages/core/migrations/meta/0021_snapshot.json +++ /dev/null @@ -1,1160 +0,0 @@ -{ - "id": "aeb2e0e9-cc3f-418d-b4ae-d4399b3d3ccc", - "prevId": "4312f388-81e7-4b19-a9ca-cca92004aaa6", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_steam_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_steam_id_pk": { - "name": "game_libraries_base_game_id_owner_steam_id_pk", - "columns": [ - "base_game_id", - "owner_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "teams_owner_steam_id_steam_accounts_id_fk": { - "name": "teams_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer", - "category", - "franchise" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0022_snapshot.json b/cloud/packages/core/migrations/meta/0022_snapshot.json deleted file mode 100644 index d1caa721..00000000 --- a/cloud/packages/core/migrations/meta/0022_snapshot.json +++ /dev/null @@ -1,1160 +0,0 @@ -{ - "id": "2fecb1ec-996a-46ba-b342-8d351007b25f", - "prevId": "aeb2e0e9-cc3f-418d-b4ae-d4399b3d3ccc", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_steam_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_steam_id_pk": { - "name": "game_libraries_base_game_id_owner_steam_id_pk", - "columns": [ - "base_game_id", - "owner_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "teams_owner_steam_id_steam_accounts_id_fk": { - "name": "teams_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer", - "categorie", - "franchise" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0023_snapshot.json b/cloud/packages/core/migrations/meta/0023_snapshot.json deleted file mode 100644 index d926cf2a..00000000 --- a/cloud/packages/core/migrations/meta/0023_snapshot.json +++ /dev/null @@ -1,1166 +0,0 @@ -{ - "id": "10e3e27a-30cc-4ef1-9966-a2490571942e", - "prevId": "2fecb1ec-996a-46ba-b342-8d351007b25f", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "links": { - "name": "links", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_steam_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_steam_id_pk": { - "name": "game_libraries_base_game_id_owner_steam_id_pk", - "columns": [ - "base_game_id", - "owner_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "teams_owner_steam_id_steam_accounts_id_fk": { - "name": "teams_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer", - "categorie", - "franchise" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0024_snapshot.json b/cloud/packages/core/migrations/meta/0024_snapshot.json deleted file mode 100644 index e54f96df..00000000 --- a/cloud/packages/core/migrations/meta/0024_snapshot.json +++ /dev/null @@ -1,1166 +0,0 @@ -{ - "id": "d35aa09b-5739-46a5-86f3-3050913dc2f7", - "prevId": "10e3e27a-30cc-4ef1-9966-a2490571942e", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "links": { - "name": "links", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_steam_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_steam_id_pk": { - "name": "game_libraries_base_game_id_owner_steam_id_pk", - "columns": [ - "base_game_id", - "owner_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.members": { - "name": "members", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "char(30)", - "primaryKey": false, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "member_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_member_steam_id": { - "name": "idx_member_steam_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_member_user_id": { - "name": "idx_member_user_id", - "columns": [ - { - "expression": "team_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"members\".\"user_id\" is not null", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "members_user_id_users_id_fk": { - "name": "members_user_id_users_id_fk", - "tableFrom": "members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "members_steam_id_steam_accounts_id_fk": { - "name": "members_steam_id_steam_accounts_id_fk", - "tableFrom": "members", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "restrict" - } - }, - "compositePrimaryKeys": { - "members_id_team_id_pk": { - "name": "members_id_team_id_pk", - "columns": [ - "id", - "team_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.teams": { - "name": "teams", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "invite_code": { - "name": "invite_code", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "max_members": { - "name": "max_members", - "type": "bigint", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "teams_owner_steam_id_steam_accounts_id_fk": { - "name": "teams_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "teams", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_team_invite_code": { - "name": "idx_team_invite_code", - "nullsNotDistinct": false, - "columns": [ - "invite_code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer", - "categorie", - "franchise" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.member_role": { - "name": "member_role", - "schema": "public", - "values": [ - "child", - "adult" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/0025_snapshot.json b/cloud/packages/core/migrations/meta/0025_snapshot.json deleted file mode 100644 index 999c6e2c..00000000 --- a/cloud/packages/core/migrations/meta/0025_snapshot.json +++ /dev/null @@ -1,930 +0,0 @@ -{ - "id": "735d315b-40e1-46c1-814d-0fd3619b65de", - "prevId": "d35aa09b-5739-46a5-86f3-3050913dc2f7", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.base_games": { - "name": "base_games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "links": { - "name": "links", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "release_date": { - "name": "release_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "size": { - "name": "size", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "primary_genre": { - "name": "primary_genre", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "controller_support": { - "name": "controller_support", - "type": "controller_support", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "compatibility": { - "name": "compatibility", - "type": "compatibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'unknown'" - }, - "score": { - "name": "score", - "type": "numeric(2, 1)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_base_games_slug": { - "name": "idx_base_games_slug", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.categories": { - "name": "categories", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_categories_type": { - "name": "idx_categories_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "categories_slug_type_pk": { - "name": "categories_slug_type_pk", - "columns": [ - "slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.friends_list": { - "name": "friends_list", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "steam_id": { - "name": "steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "friend_steam_id": { - "name": "friend_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_friends_list_friend_steam_id": { - "name": "idx_friends_list_friend_steam_id", - "columns": [ - { - "expression": "friend_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "friends_list_steam_id_steam_accounts_id_fk": { - "name": "friends_list_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_list_friend_steam_id_steam_accounts_id_fk": { - "name": "friends_list_friend_steam_id_steam_accounts_id_fk", - "tableFrom": "friends_list", - "tableTo": "steam_accounts", - "columnsFrom": [ - "friend_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_list_steam_id_friend_steam_id_pk": { - "name": "friends_list_steam_id_friend_steam_id_pk", - "columns": [ - "steam_id", - "friend_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.games": { - "name": "games", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "category_slug": { - "name": "category_slug", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "category_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_games_category_slug": { - "name": "idx_games_category_slug", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_type": { - "name": "idx_games_category_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_games_category_slug_type": { - "name": "idx_games_category_slug_type", - "columns": [ - { - "expression": "category_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "games_base_game_id_base_games_id_fk": { - "name": "games_base_game_id_base_games_id_fk", - "tableFrom": "games", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "games_categories_fkey": { - "name": "games_categories_fkey", - "tableFrom": "games", - "tableTo": "categories", - "columnsFrom": [ - "category_slug", - "type" - ], - "columnsTo": [ - "slug", - "type" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "games_base_game_id_category_slug_type_pk": { - "name": "games_base_game_id_category_slug_type_pk", - "columns": [ - "base_game_id", - "category_slug", - "type" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.images": { - "name": "images", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "image_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image_hash": { - "name": "image_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "file_size": { - "name": "file_size", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "dimensions": { - "name": "dimensions", - "type": "json", - "primaryKey": false, - "notNull": true - }, - "extracted_color": { - "name": "extracted_color", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_images_type": { - "name": "idx_images_type", - "columns": [ - { - "expression": "type", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "idx_images_game_id": { - "name": "idx_images_game_id", - "columns": [ - { - "expression": "base_game_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "images_base_game_id_base_games_id_fk": { - "name": "images_base_game_id_base_games_id_fk", - "tableFrom": "images", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "images_image_hash_type_base_game_id_position_pk": { - "name": "images_image_hash_type_base_game_id_position_pk", - "columns": [ - "image_hash", - "type", - "base_game_id", - "position" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.game_libraries": { - "name": "game_libraries", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "base_game_id": { - "name": "base_game_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "owner_steam_id": { - "name": "owner_steam_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "last_played": { - "name": "last_played", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "total_playtime": { - "name": "total_playtime", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "idx_game_libraries_owner_id": { - "name": "idx_game_libraries_owner_id", - "columns": [ - { - "expression": "owner_steam_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "game_libraries_base_game_id_base_games_id_fk": { - "name": "game_libraries_base_game_id_base_games_id_fk", - "tableFrom": "game_libraries", - "tableTo": "base_games", - "columnsFrom": [ - "base_game_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "game_libraries_owner_steam_id_steam_accounts_id_fk": { - "name": "game_libraries_owner_steam_id_steam_accounts_id_fk", - "tableFrom": "game_libraries", - "tableTo": "steam_accounts", - "columnsFrom": [ - "owner_steam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "game_libraries_base_game_id_owner_steam_id_pk": { - "name": "game_libraries_base_game_id_owner_steam_id_pk", - "columns": [ - "base_game_id", - "owner_steam_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.steam_accounts": { - "name": "steam_accounts", - "schema": "", - "columns": { - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "char(30)", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "steam_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "real_name": { - "name": "real_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "member_since": { - "name": "member_since", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "profile_url": { - "name": "profile_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "avatar_hash": { - "name": "avatar_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "limitations": { - "name": "limitations", - "type": "json", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "steam_accounts_user_id_users_id_fk": { - "name": "steam_accounts_user_id_users_id_fk", - "tableFrom": "steam_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "char(30)", - "primaryKey": true, - "notNull": true - }, - "time_created": { - "name": "time_created", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_updated": { - "name": "time_updated", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "time_deleted": { - "name": "time_deleted", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_login": { - "name": "last_login", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "polar_customer_id": { - "name": "polar_customer_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "idx_user_email": { - "name": "idx_user_email", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.compatibility": { - "name": "compatibility", - "schema": "public", - "values": [ - "high", - "mid", - "low", - "unknown" - ] - }, - "public.controller_support": { - "name": "controller_support", - "schema": "public", - "values": [ - "full", - "partial", - "unknown" - ] - }, - "public.category_type": { - "name": "category_type", - "schema": "public", - "values": [ - "tag", - "genre", - "publisher", - "developer", - "categorie", - "franchise" - ] - }, - "public.image_type": { - "name": "image_type", - "schema": "public", - "values": [ - "heroArt", - "icon", - "logo", - "banner", - "poster", - "boxArt", - "screenshot", - "backdrop" - ] - }, - "public.steam_status": { - "name": "steam_status", - "schema": "public", - "values": [ - "online", - "offline", - "dnd", - "playing" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/cloud/packages/core/migrations/meta/_journal.json b/cloud/packages/core/migrations/meta/_journal.json deleted file mode 100644 index 9d27e0fa..00000000 --- a/cloud/packages/core/migrations/meta/_journal.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1741759978256, - "tag": "0000_flaky_matthew_murdock", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1741955636085, - "tag": "0001_nifty_sauron", - "breakpoints": true - }, - { - "idx": 2, - "version": "7", - "when": 1743794969007, - "tag": "0002_simple_outlaw_kid", - "breakpoints": true - }, - { - "idx": 3, - "version": "7", - "when": 1744287542918, - "tag": "0003_first_big_bertha", - "breakpoints": true - }, - { - "idx": 4, - "version": "7", - "when": 1744614629788, - "tag": "0004_amused_mattie_franklin", - "breakpoints": true - }, - { - "idx": 5, - "version": "7", - "when": 1744614896792, - "tag": "0005_aspiring_stature", - "breakpoints": true - }, - { - "idx": 6, - "version": "7", - "when": 1744634229644, - "tag": "0006_worthless_dreadnoughts", - "breakpoints": true - }, - { - "idx": 7, - "version": "7", - "when": 1744634322996, - "tag": "0007_warm_secret_warriors", - "breakpoints": true - }, - { - "idx": 8, - "version": "7", - "when": 1744651530530, - "tag": "0008_third_mindworm", - "breakpoints": true - }, - { - "idx": 9, - "version": "7", - "when": 1744651817581, - "tag": "0009_luxuriant_wraith", - "breakpoints": true - }, - { - "idx": 10, - "version": "7", - "when": 1746726715456, - "tag": "0010_certain_dust", - "breakpoints": true - }, - { - "idx": 11, - "version": "7", - "when": 1746904821461, - "tag": "0011_simple_azazel", - "breakpoints": true - }, - { - "idx": 12, - "version": "7", - "when": 1746905730079, - "tag": "0012_glorious_jetstream", - "breakpoints": true - }, - { - "idx": 13, - "version": "7", - "when": 1746925065142, - "tag": "0013_neat_colleen_wing", - "breakpoints": true - }, - { - "idx": 14, - "version": "7", - "when": 1746926498096, - "tag": "0014_thin_groot", - "breakpoints": true - }, - { - "idx": 15, - "version": "7", - "when": 1746928882281, - "tag": "0015_handy_giant_man", - "breakpoints": true - }, - { - "idx": 16, - "version": "7", - "when": 1747032794033, - "tag": "0016_melted_johnny_storm", - "breakpoints": true - }, - { - "idx": 17, - "version": "7", - "when": 1747034424687, - "tag": "0017_zippy_nico_minoru", - "breakpoints": true - }, - { - "idx": 18, - "version": "7", - "when": 1747073173196, - "tag": "0018_solid_enchantress", - "breakpoints": true - }, - { - "idx": 19, - "version": "7", - "when": 1747202158003, - "tag": "0019_charming_namorita", - "breakpoints": true - }, - { - "idx": 20, - "version": "7", - "when": 1747795508868, - "tag": "0020_vengeful_wallop", - "breakpoints": true - }, - { - "idx": 21, - "version": "7", - "when": 1747975397543, - "tag": "0021_real_skreet", - "breakpoints": true - }, - { - "idx": 22, - "version": "7", - "when": 1748099972605, - "tag": "0022_clean_living_lightning", - "breakpoints": true - }, - { - "idx": 23, - "version": "7", - "when": 1748411845939, - "tag": "0023_flawless_steel_serpent", - "breakpoints": true - }, - { - "idx": 24, - "version": "7", - "when": 1748414049463, - "tag": "0024_damp_cerise", - "breakpoints": true - }, - { - "idx": 25, - "version": "7", - "when": 1748845818197, - "tag": "0025_bitter_jack_flag", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/cloud/packages/core/package.json b/cloud/packages/core/package.json deleted file mode 100644 index 27415d79..00000000 --- a/cloud/packages/core/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@nestri/core", - "version": "0.0.0", - "sideEffects": false, - "type": "module", - "scripts": { - "db:dev": "drizzle-kit", - "typecheck": "tsc --noEmit", - "db": "sst shell drizzle-kit", - "db:exec": "sst shell ../scripts/src/psql.sh", - "db:reset": "sst shell ../scripts/src/db-reset.sh" - }, - "exports": { - "./*": "./src/*.ts" - }, - "devDependencies": { - "@tsconfig/node20": "^20.1.4", - "@types/pngjs": "^6.0.5", - "@types/sanitize-html": "^2.16.0", - "@types/xml2js": "^0.4.14", - "aws-iot-device-sdk-v2": "^1.21.1", - "aws4fetch": "^1.0.20", - "mqtt": "^5.10.3", - "remeda": "^2.21.2", - "ulid": "^2.3.0", - "zod": "^3.24.1", - "zod-openapi": "^4.2.2" - }, - "dependencies": { - "@aws-sdk/client-iot-data-plane": "^3.758.0", - "@aws-sdk/client-sesv2": "^3.753.0", - "@neondatabase/serverless": "^1.0.1", - "@openauthjs/openauth": "*", - "@openauthjs/openevent": "^0.0.27", - "@polar-sh/sdk": "^0.26.1", - "drizzle-kit": "^0.30.5", - "drizzle-orm": "^0.40.0", - "drizzle-zod": "^0.7.1", - "fast-average-color": "^9.5.0", - "lru-cache": "^11.1.0", - "p-limit": "^6.2.0", - "pixelmatch": "^7.1.0", - "pngjs": "^7.0.0", - "postgres": "^3.4.5", - "sanitize-html": "^2.16.0", - "sharp": "^0.34.1", - "steam-session": "*", - "ws": "^8.18.3", - "xml2js": "^0.6.2" - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/account/index.ts b/cloud/packages/core/src/account/index.ts deleted file mode 100644 index 7a2921d5..00000000 --- a/cloud/packages/core/src/account/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { z } from "zod" -import { User } from "../user"; -import { Steam } from "../steam"; -import { Actor } from "../actor"; -import { Examples } from "../examples"; -import { ErrorCodes, VisibleError } from "../error"; - -export namespace Account { - export const Info = - User.Info - .extend({ - profiles: Steam.Info - .array() - .openapi({ - description: "The Steam accounts this user owns", - example: [Examples.SteamAccount] - }) - }) - .openapi({ - ref: "Account", - description: "Represents an account's information stored on Nestri", - example: { ...Examples.User, profiles: [Examples.SteamAccount] }, - }); - - export type Info = z.infer; - - export const list = async (): Promise => { - const [userResult, steamResult] = - await Promise.allSettled([ - User.fromID(Actor.userID()), - Steam.list() - ]) - - if (userResult.status === "rejected" || !userResult.value) - throw new VisibleError( - "not_found", - ErrorCodes.NotFound.RESOURCE_NOT_FOUND, - "User not found", - ); - - return { - ...userResult.value, - profiles: steamResult.status === "rejected" ? [] : steamResult.value - } - } - -} \ No newline at end of file diff --git a/cloud/packages/core/src/actor.ts b/cloud/packages/core/src/actor.ts deleted file mode 100644 index 943eeb47..00000000 --- a/cloud/packages/core/src/actor.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { Log } from "./utils"; -import { Context } from "./context"; -import { ErrorCodes, VisibleError } from "./error"; - -export namespace Actor { - export interface User { - type: "user"; - properties: { - userID: string; - email: string; - }; - } - - export interface Steam { - type: "steam"; - properties: { - steamID: string; - }; - } - - export interface Machine { - type: "machine"; - properties: { - machineID: string; - fingerprint: string; - }; - } - - export interface Token { - type: "member"; - properties: { - userID: string; - steamID: string; - }; - } - - export interface Public { - type: "public"; - properties: {}; - } - - export type Info = User | Public | Token | Machine | Steam; - - export const CurrentContext = Context.create(); - - export function userID() { - const actor = CurrentContext.use(); - if ("userID" in actor.properties) return actor.properties.userID; - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `You don't have permission to access this resource.`, - ); - } - - export function steamID() { - const actor = CurrentContext.use(); - if ("steamID" in actor.properties) return actor.properties.steamID; - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `You don't have permission to access this resource.`, - ); - } - - export function user() { - const actor = CurrentContext.use(); - if (actor.type == "user") return actor.properties; - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `You don't have permission to access this resource.`, - ); - } - - export function teamID() { - const actor = CurrentContext.use(); - if ("teamID" in actor.properties) return actor.properties.teamID; - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `You don't have permission to access this resource.`, - ); - } - - export function fingerprint() { - const actor = CurrentContext.use(); - if ("fingerprint" in actor.properties) return actor.properties.fingerprint; - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `You don't have permission to access this resource.`, - ); - } - - export function use() { - try { - return CurrentContext.use(); - } catch { - return { type: "public", properties: {} } as Public; - } - } - - export function assert(type: T) { - const actor = use(); - if (actor.type !== type) - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `Actor is not "${type}"`, - ); - return actor as Extract; - } - - export function provide< - T extends Info["type"], - Next extends (...args: any) => any, - >(type: T, properties: Extract["properties"], fn: Next) { - return CurrentContext.provide({ type, properties } as any, () => - Log.provide( - { - actor: type, - ...properties, - }, - fn, - ), - ); - } -} diff --git a/cloud/packages/core/src/base-game/base-game.sql.ts b/cloud/packages/core/src/base-game/base-game.sql.ts deleted file mode 100644 index 369e0f1c..00000000 --- a/cloud/packages/core/src/base-game/base-game.sql.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { z } from "zod"; -import { timestamps, utc } from "../drizzle/types"; -import { json, numeric, pgEnum, pgTable, text, unique, varchar } from "drizzle-orm/pg-core"; - -export const CompatibilityEnum = pgEnum("compatibility", ["high", "mid", "low", "unknown"]) -export const ControllerEnum = pgEnum("controller_support", ["full", "partial", "unknown"]) - -export const Size = - z.object({ - downloadSize: z.number().positive().int(), - sizeOnDisk: z.number().positive().int() - }); - -export const Links = z.string().array(); - -export type Size = z.infer; -export type Links = z.infer; - -export const baseGamesTable = pgTable( - "base_games", - { - ...timestamps, - id: varchar("id", { length: 255 }) - .primaryKey() - .notNull(), - links: json("links").$type(), - slug: varchar("slug", { length: 255 }) - .notNull(), - name: text("name").notNull(), - description: text("description"), - releaseDate: utc("release_date").notNull(), - size: json("size").$type().notNull(), - primaryGenre: text("primary_genre"), - controllerSupport: ControllerEnum("controller_support").notNull(), - compatibility: CompatibilityEnum("compatibility").notNull().default("unknown"), - // Score ranges from 0.0 to 5.0 - score: numeric("score", { precision: 2, scale: 1 }) - .$type() - .notNull() - }, - (table) => [ - unique("idx_base_games_slug").on(table.slug), - ] -) \ No newline at end of file diff --git a/cloud/packages/core/src/base-game/index.ts b/cloud/packages/core/src/base-game/index.ts deleted file mode 100644 index 6484e68e..00000000 --- a/cloud/packages/core/src/base-game/index.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { Common } from "../common"; -import { Examples } from "../examples"; -import { createEvent } from "../event"; -import { eq, isNull, and } from "drizzle-orm"; -import { ImageTypeEnum } from "../images/images.sql"; -import { Database } from "../drizzle"; -import { - CompatibilityEnum, - baseGamesTable, - Size, - ControllerEnum, - Links, -} from "./base-game.sql"; - -export namespace BaseGame { - export const Info = z - .object({ - id: z.string().openapi({ - description: Common.IdDescription, - example: Examples.BaseGame.id, - }), - slug: z.string().openapi({ - description: - "A URL-friendly unique identifier for the game, used in web addresses and API endpoints", - example: Examples.BaseGame.slug, - }), - name: z.string().openapi({ - description: "The official title of the game as listed on Steam", - example: Examples.BaseGame.name, - }), - size: Size.openapi({ - description: - "Storage requirements in bytes: downloadSize represents the compressed download, and sizeOnDisk represents the installed size", - example: Examples.BaseGame.size, - }), - releaseDate: z.date().openapi({ - description: "The initial public release date of the game on Steam", - example: Examples.BaseGame.releaseDate, - }), - description: z.string().nullable().openapi({ - description: - "A comprehensive overview of the game, including its features, storyline, and gameplay elements", - example: Examples.BaseGame.description, - }), - score: z.number().openapi({ - description: - "The aggregate user review score on Steam, represented as a percentage of positive reviews", - example: Examples.BaseGame.score, - }), - links: Links.nullable().openapi({ - description: "The social links of this game", - example: Examples.BaseGame.links, - }), - primaryGenre: z.string().nullable().openapi({ - description: - "The main category or genre that best represents the game's content and gameplay style", - example: Examples.BaseGame.primaryGenre, - }), - controllerSupport: z.enum(ControllerEnum.enumValues).openapi({ - description: - "Indicates the level of gamepad/controller compatibility: 'Full', 'Partial', or 'Unkown' for no support", - example: Examples.BaseGame.controllerSupport, - }), - compatibility: z.enum(CompatibilityEnum.enumValues).openapi({ - description: - "Steam Deck/Proton compatibility rating indicating how well the game runs on Linux systems", - example: Examples.BaseGame.compatibility, - }), - }) - .openapi({ - ref: "BaseGame", - description: - "Detailed information about a game available in the Nestri library, including technical specifications and metadata", - example: Examples.BaseGame, - }); - - export type Info = z.infer; - - export const Events = { - New: createEvent( - "new_image.save", - z.object({ - appID: Info.shape.id, - url: z.string().url(), - type: z.enum(ImageTypeEnum.enumValues), - }), - ), - NewBoxArt: createEvent( - "new_box_art_image.save", - z.object({ - appID: Info.shape.id, - logoUrl: z.string().url(), - backgroundUrl: z.string().url(), - }), - ), - NewHeroArt: createEvent( - "new_hero_art_image.save", - z.object({ - appID: Info.shape.id, - backdropUrl: z.string().url(), - screenshots: z.string().url().array(), - }), - ), - }; - - export const create = fn(Info, (input) => - Database.transaction(async (tx) => { - const result = await tx - .select() - .from(baseGamesTable) - .where( - and( - eq(baseGamesTable.id, input.id), - isNull(baseGamesTable.timeDeleted), - ), - ) - .limit(1) - .execute() - .then((rows) => rows.at(0)); - - if (result) return result.id; - - await tx - .insert(baseGamesTable) - .values(input) - .onConflictDoUpdate({ - target: baseGamesTable.id, - set: { - timeDeleted: null, - }, - }); - - return input.id; - }), - ); - - export const fromID = fn(Info.shape.id, (id) => - Database.transaction(async (tx) => - tx - .select() - .from(baseGamesTable) - .where( - and(eq(baseGamesTable.id, id), isNull(baseGamesTable.timeDeleted)), - ) - .limit(1) - .then((rows) => rows.map(serialize).at(0)), - ), - ); - - export function serialize( - input: typeof baseGamesTable.$inferSelect, - ): z.infer { - return { - id: input.id, - name: input.name, - slug: input.slug, - size: input.size, - links: input.links, - score: input.score, - description: input.description, - releaseDate: input.releaseDate, - primaryGenre: input.primaryGenre, - compatibility: input.compatibility, - controllerSupport: input.controllerSupport, - }; - } -} diff --git a/cloud/packages/core/src/categories/categories.sql.ts b/cloud/packages/core/src/categories/categories.sql.ts deleted file mode 100644 index cf74cbca..00000000 --- a/cloud/packages/core/src/categories/categories.sql.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { timestamps } from "../drizzle/types"; -import { index, pgEnum, pgTable, primaryKey, text, varchar } from "drizzle-orm/pg-core"; - -// Intentional grammatical error on category -export const CategoryTypeEnum = pgEnum("category_type", ["tag", "genre", "publisher", "developer", "categorie", "franchise"]) - -export const categoriesTable = pgTable( - "categories", - { - ...timestamps, - slug: varchar("slug", { length: 255 }) - .notNull(), - type: CategoryTypeEnum("type").notNull(), - name: text("name").notNull(), - }, - (table) => [ - primaryKey({ - columns: [table.slug, table.type] - }), - index("idx_categories_type").on(table.type), - ] -) \ No newline at end of file diff --git a/cloud/packages/core/src/categories/index.ts b/cloud/packages/core/src/categories/index.ts deleted file mode 100644 index a947ad75..00000000 --- a/cloud/packages/core/src/categories/index.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { Database } from "../drizzle"; -import { Examples } from "../examples"; -import { eq, isNull, and } from "drizzle-orm"; -import { createSelectSchema } from "drizzle-zod"; -import { categoriesTable } from "./categories.sql"; - -export namespace Categories { - const Category = z.object({ - slug: z.string().openapi({ - description: "A URL-friendly unique identifier for the category", - example: "action-adventure", - }), - name: z.string().openapi({ - description: "The human-readable display name of the category", - example: "Action Adventure", - }), - }); - - export const Info = z - .object({ - publishers: Category.array().openapi({ - description: - "List of companies or organizations responsible for publishing and distributing the game", - example: Examples.Categories.publishers, - }), - developers: Category.array().openapi({ - description: - "List of studios, teams, or individuals who created and developed the game", - example: Examples.Categories.developers, - }), - tags: Category.array().openapi({ - description: - "User-defined labels that describe specific features, themes, or characteristics of the game", - example: Examples.Categories.tags, - }), - genres: Category.array().openapi({ - description: - "Primary classification categories that define the game's style and type of gameplay", - example: Examples.Categories.genres, - }), - categories: Category.array().openapi({ - description: - "Primary classification categories that define the game's categorisation on Steam", - example: Examples.Categories.genres, - }), - franchises: Category.array().openapi({ - description: "The franchise this game belongs belongs to on Steam", - example: Examples.Categories.genres, - }), - }) - .openapi({ - ref: "Categories", - description: - "A comprehensive categorization system for games, including publishing details, development credits, and content classification", - example: Examples.Categories, - }); - - export type Info = z.infer; - - export const InputInfo = createSelectSchema(categoriesTable).omit({ - timeCreated: true, - timeDeleted: true, - timeUpdated: true, - }); - - export const create = fn(InputInfo, (input) => - Database.transaction(async (tx) => { - const result = await tx - .select() - .from(categoriesTable) - .where( - and( - eq(categoriesTable.slug, input.slug), - eq(categoriesTable.type, input.type), - isNull(categoriesTable.timeDeleted), - ), - ) - .limit(1) - .execute() - .then((rows) => rows.at(0)); - - if (result) return result.slug; - - await tx - .insert(categoriesTable) - .values(input) - .onConflictDoUpdate({ - target: [categoriesTable.slug, categoriesTable.type], - set: { timeDeleted: null }, - }); - - return input.slug; - }), - ); - - export const get = fn(InputInfo.pick({ slug: true, type: true }), (input) => - Database.transaction((tx) => - tx - .select() - .from(categoriesTable) - .where( - and( - eq(categoriesTable.slug, input.slug), - eq(categoriesTable.type, input.type), - isNull(categoriesTable.timeDeleted), - ), - ) - .limit(1) - .execute() - .then((rows) => serialize(rows)), - ), - ); - - export function serialize( - input: (typeof categoriesTable.$inferSelect)[], - ): z.infer { - return input.reduce< - Record< - `${(typeof categoriesTable.$inferSelect)["type"]}s`, - { slug: string; name: string }[] - > - >( - (acc, cat) => { - const key = `${cat.type}s` as `${typeof cat.type}s`; - acc[key]!.push({ slug: cat.slug, name: cat.name }); - return acc; - }, - { - tags: [], - genres: [], - publishers: [], - developers: [], - categories: [], - franchises: [], - }, - ); - } -} diff --git a/cloud/packages/core/src/client/index.ts b/cloud/packages/core/src/client/index.ts deleted file mode 100644 index a63c2c07..00000000 --- a/cloud/packages/core/src/client/index.ts +++ /dev/null @@ -1,316 +0,0 @@ -import type { - Shot, - AppInfo, - ImageInfo, - ImageType, - SteamAccount, - GameTagsResponse, - GameDetailsResponse, - SteamAppDataResponse, - SteamOwnedGamesResponse, - SteamPlayerBansResponse, - SteamFriendsListResponse, - SteamPlayerSummaryResponse, - SteamStoreResponse, -} from "./types"; -import { z } from "zod"; -import { fn } from "../utils"; -import { Resource } from "sst"; -import { Steam } from "./steam"; -import { Utils } from "./utils"; -import { ImageTypeEnum } from "../images/images.sql"; - -export namespace Client { - export const getUserLibrary = fn( - z.string(), - async (steamID) => - await Utils.fetchApi(`https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=${Resource.SteamApiKey.value}&steamid=${steamID}&include_appinfo=1&format=json&include_played_free_games=1&skip_unvetted_apps=0`) - ) - - export const getFriendsList = fn( - z.string(), - async (steamID) => - await Utils.fetchApi(`https://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=${Resource.SteamApiKey.value}&steamid=${steamID}&relationship=friend`) - ); - - export const getUserInfo = fn( - z.string().array(), - async (steamIDs) => { - const [userInfo, banInfo, profileInfo] = await Promise.all([ - Utils.fetchApi(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${Resource.SteamApiKey.value}&steamids=${steamIDs.join(",")}`), - Utils.fetchApi(`https://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key=${Resource.SteamApiKey.value}&steamids=${steamIDs.join(",")}`), - Utils.fetchProfilesInfo(steamIDs) - ]) - - // Create a map of bans by steamID for fast lookup - const bansBySteamID = new Map( - banInfo.players.map((b) => [b.SteamId, b]) - ); - - // Map userInfo.players to your desired output using Promise.allSettled - // to prevent one error from closing down the whole pipeline - const steamAccounts = await Promise.allSettled( - userInfo.response.players.map(async (player) => { - const ban = bansBySteamID.get(player.steamid); - const info = profileInfo.get(player.steamid); - - if (!info) { - throw new Error(`[userInfo] profile info missing for ${player.steamid}`) - } - - if ('error' in info) { - throw new Error(`error handling profile info for: ${player.steamid}:${info.error}`) - } else { - return { - id: player.steamid, - name: player.personaname, - realName: player.realname ?? null, - steamMemberSince: new Date(player.timecreated * 1000), - avatarHash: player.avatarhash, - limitations: { - isLimited: info.isLimited, - privacyState: info.privacyState, - isVacBanned: ban?.VACBanned ?? false, - tradeBanState: ban?.EconomyBan ?? "none", - visibilityState: player.communityvisibilitystate, - }, - lastSyncedAt: new Date(), - profileUrl: player.profileurl, - }; - } - }) - ); - - steamAccounts - .filter(result => result.status === 'rejected') - .forEach(result => console.warn('[userInfo] failed:', (result as PromiseRejectedResult).reason)) - - return steamAccounts.filter(result => result.status === "fulfilled").map(result => (result as PromiseFulfilledResult).value) - }) - - export const getAppInfo = fn( - z.string(), - async (appid) => { - try { - const info = await Promise.all([ - Utils.fetchApi(`https://api.steamcmd.net/v1/info/${appid}`), - Utils.fetchApi(`https://api.steampowered.com/IStoreBrowseService/GetItems/v1/?key=${Resource.SteamApiKey.value}&input_json={"ids":[{"appid":"${appid}"}],"context":{"language":"english","country_code":"US","steam_realm":"1"},"data_request":{"include_assets":true,"include_release":true,"include_platforms":true,"include_all_purchase_options":true,"include_screenshots":true,"include_trailers":true,"include_ratings":true,"include_tag_count":"40","include_reviews":true,"include_basic_info":true,"include_supported_languages":true,"include_full_description":true,"include_included_items":true,"include_assets_without_overrides":true,"apply_user_filters":true,"include_links":true}}`), - ]); - - const cmd = info[0].data[appid] - const store = info[1].response.store_items[0] - - if (!cmd) { - throw new Error(`App data not found for appid: ${appid}`) - } - - if (!store || store.success !== 1) { - throw new Error(`Could not get store information or appid: ${appid}`) - } - - const tags = store.tagids - .map(id => Steam.tags[id.toString() as keyof typeof Steam.tags]) - .filter((name): name is string => typeof name === 'string') - - const publishers = store.basic_info.publishers - .map(i => i.name) - - const developers = store.basic_info.developers - .map(i => i.name) - - const franchises = store.basic_info.franchises - ?.map(i => i.name) - - const genres = cmd?.common.genres && - Object.keys(cmd?.common.genres) - .map(id => Steam.genres[id.toString() as keyof typeof Steam.genres]) - .filter((name): name is string => typeof name === 'string') - - const categories = [ - ...(store.categories?.controller_categoryids?.map(i => Steam.categories[i.toString() as keyof typeof Steam.categories]) ?? []), - ...(store.categories?.supported_player_categoryids?.map(i => Steam.categories[i.toString() as keyof typeof Steam.categories]) ?? []) - ].filter((name): name is string => typeof name === 'string') - - const assetUrls = Utils.getAssetUrls(cmd?.common.library_assets_full, appid, cmd?.common.header_image.english); - - const screenshots = store.screenshots.all_ages_screenshots?.map(i => `https://shared.cloudflare.steamstatic.com/store_item_assets/${i.filename}`) ?? []; - - const icon = `https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/apps/${appid}/${cmd?.common.icon}.jpg`; - - const data: AppInfo = { - id: appid, - name: cmd?.common.name.trim(), - tags: Utils.createType(tags, "tag"), - images: { screenshots, icon, ...assetUrls }, - size: Utils.getPublicDepotSizes(cmd?.depots!), - slug: Utils.createSlug(cmd?.common.name.trim()), - publishers: Utils.createType(publishers, "publisher"), - developers: Utils.createType(developers, "developer"), - categories: Utils.createType(categories, "categorie"), - links: store.links ? store.links.map(i => i.url) : null, - genres: genres ? Utils.createType(genres, "genre") : [], - franchises: franchises ? Utils.createType(franchises, "franchise") : [], - description: store.basic_info.short_description ? Utils.cleanDescription(store.basic_info.short_description) : null, - controllerSupport: cmd?.common.controller_support ?? "unknown" as any, - releaseDate: new Date(Number(cmd?.common.steam_release_date) * 1000), - primaryGenre: !!cmd?.common.primary_genre && Steam.genres[cmd?.common.primary_genre as keyof typeof Steam.genres] ? Steam.genres[cmd?.common.primary_genre as keyof typeof Steam.genres] : null, - compatibility: store?.platforms.steam_os_compat_category ? Utils.compatibilityType(store?.platforms.steam_os_compat_category.toString() as any).toLowerCase() : "unknown" as any, - score: Utils.estimateRatingFromSummary(store.reviews.summary_filtered.review_count, store.reviews.summary_filtered.percent_positive) - } - - return data - } catch (err) { - console.log(`Error handling: ${appid}`) - throw err - } - } - ) - - export const getImageUrls = fn( - z.string(), - async (appid) => { - const [appData, details] = await Promise.all([ - Utils.fetchApi(`https://api.steamcmd.net/v1/info/${appid}`), - Utils.fetchApi( - `https://store.steampowered.com/apphover/${appid}?full=1&review_score_preference=1&pagev6=true&json=1` - ), - ]); - - const game = appData.data[appid]?.common; - if (!game) throw new Error('Game info missing'); - - // 2. Prepare URLs - const screenshots = Utils.getScreenshotUrls(details.rgScreenshots || []); - const assetUrls = Utils.getAssetUrls(game.library_assets_full, appid, game.header_image.english); - const icon = `https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/apps/${appid}/${game.icon}.jpg`; - - return { screenshots, icon, ...assetUrls } - } - ) - - export const getImageInfo = fn( - z.object({ - type: z.enum(ImageTypeEnum.enumValues), - url: z.string() - }), - async (input) => - Utils.fetchBuffer(input.url) - .then(buf => Utils.getImageMetadata(buf)) - .then(meta => ({ ...meta, position: 0, sourceUrl: input.url, type: input.type } as ImageInfo)) - ) - - export const createBoxArt = fn( - z.object({ - backgroundUrl: z.string(), - logoUrl: z.string(), - }), - async (input) => - Utils.createBoxArtBuffer(input.logoUrl, input.backgroundUrl) - .then(buf => Utils.getImageMetadata(buf)) - .then(meta => ({ ...meta, position: 0, sourceUrl: null, type: 'boxArt' as const }) as ImageInfo) - ) - - export const createHeroArt = fn( - z.object({ - screenshots: z.string().array(), - backdropUrl: z.string() - }), - async (input) => { - // Download screenshot buffers in parallel - const shots: Shot[] = await Promise.all( - input.screenshots.map(async url => ({ url, buffer: await Utils.fetchBuffer(url) })) - ); - - const baselineBuffer = await Utils.fetchBuffer(input.backdropUrl); - - // 4. Score screenshots (or pick single) - const scores = - shots.length === 1 - ? [{ url: shots[0].url, score: 0 }] - : (await Utils.rankScreenshots(baselineBuffer, shots, { - threshold: 0.08, - })) - - // Build url->rank map - const rankMap = new Map(); - scores.forEach((s, i) => rankMap.set(s.url, i)); - - // 5. Create tasks for all images - const tasks: Array> = []; - - // 5a. Screenshots and heroArt metadata (top 4) - for (const { url, buffer } of shots) { - const rank = rankMap.get(url); - if (rank === undefined || rank >= 4) continue; - const type: ImageType = rank === 0 ? 'heroArt' : 'screenshot'; - tasks.push( - Utils.getImageMetadata(buffer).then(meta => ({ ...meta, sourceUrl: url, position: type == "screenshot" ? rank - 1 : rank, type } as ImageInfo)) - ); - } - - const settled = await Promise.allSettled(tasks); - - settled - .filter(r => r.status === "rejected") - .forEach(r => console.warn("[getHeroArt] failed:", (r as PromiseRejectedResult).reason)); - - // Await all and return - return settled.filter(s => s.status === "fulfilled").map(r => (r as PromiseFulfilledResult).value) - } - ) - - /** - * Verifies a Steam OpenID response by sending a request back to Steam - * with mode=check_authentication - */ - export async function verifyOpenIDResponse(params: URLSearchParams): Promise { - try { - // Create a new URLSearchParams with all the original parameters - const verificationParams = new URLSearchParams(); - - // Copy all parameters from the original request - for (const [key, value] of params.entries()) { - verificationParams.append(key, value); - } - - // Change mode to check_authentication for verification - verificationParams.set('openid.mode', 'check_authentication'); - - // Send verification request to Steam - const verificationResponse = await fetch('https://steamcommunity.com/openid/login', { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: verificationParams.toString() - }); - - const responseText = await verificationResponse.text(); - - // Check if verification was successful - if (!responseText.includes('is_valid:true')) { - console.error('OpenID verification failed: Invalid response from Steam', responseText); - return null; - } - - // Extract steamID from the claimed_id - const claimedId = params.get('openid.claimed_id'); - if (!claimedId) { - console.error('OpenID verification failed: Missing claimed_id'); - return null; - } - - // Extract the Steam ID from the claimed_id - const steamID = claimedId.split('/').pop(); - if (!steamID || !/^\d+$/.test(steamID)) { - console.error('OpenID verification failed: Invalid steamID format', steamID); - return null; - } - - return steamID; - } catch (error) { - console.error('OpenID verification error:', error); - return null; - } - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/client/steam.ts b/cloud/packages/core/src/client/steam.ts deleted file mode 100644 index ffaf321f..00000000 --- a/cloud/packages/core/src/client/steam.ts +++ /dev/null @@ -1,544 +0,0 @@ -export namespace Steam { - //Source: https://github.com/woctezuma/steam-api/blob/master/data/genres.json - export const genres = { - "1": "Action", - "2": "Strategy", - "3": "RPG", - "4": "Casual", - "9": "Racing", - "18": "Sports", - "23": "Indie", - "25": "Adventure", - "28": "Simulation", - "29": "Massively Multiplayer", - "37": "Free to Play", - "50": "Accounting", - "51": "Animation & Modeling", - "52": "Audio Production", - "53": "Design & Illustration", - "54": "Education", - "55": "Photo Editing", - "56": "Software Training", - "57": "Utilities", - "58": "Video Production", - "59": "Web Publishing", - "60": "Game Development", - "70": "Early Access", - "71": "Sexual Content", - "72": "Nudity", - "73": "Violent", - "74": "Gore", - "80": "Movie", - "81": "Documentary", - "82": "Episodic", - "83": "Short", - "84": "Tutorial", - "85": "360 Video" - } - - //Source: https://github.com/woctezuma/steam-api/blob/master/data/categories.json - export const categories = { - "1": "Multi-player", - "2": "Single-player", - "6": "Mods (require HL2)", - "7": "Mods (require HL1)", - "8": "Valve Anti-Cheat enabled", - "9": "Co-op", - "10": "Demos", - "12": "HDR available", - "13": "Captions available", - "14": "Commentary available", - "15": "Stats", - "16": "Includes Source SDK", - "17": "Includes level editor", - "18": "Partial Controller Support", - "19": "Mods", - "20": "MMO", - "21": "Downloadable Content", - "22": "Steam Achievements", - "23": "Steam Cloud", - "24": "Shared/Split Screen", - "25": "Steam Leaderboards", - "27": "Cross-Platform Multiplayer", - "28": "Full controller support", - "29": "Steam Trading Cards", - "30": "Steam Workshop", - "31": "VR Support", - "32": "Steam Turn Notifications", - "33": "Native Steam Controller", - "35": "In-App Purchases", - "36": "Online PvP", - "37": "Shared/Split Screen PvP", - "38": "Online Co-op", - "39": "Shared/Split Screen Co-op", - "40": "SteamVR Collectibles", - "41": "Remote Play on Phone", - "42": "Remote Play on Tablet", - "43": "Remote Play on TV", - "44": "Remote Play Together", - "45": "Cloud Gaming", - "46": "Cloud Gaming (NVIDIA)", - "47": "LAN PvP", - "48": "LAN Co-op", - "49": "PvP", - "50": "Additional High-Quality Audio", - "51": "Steam Workshop", - "52": "Tracked Controller Support", - "53": "VR Supported", - "54": "VR Only" - } - - // Source: https://files.catbox.moe/96bty7.json - export const tags = { - "9": "Strategy", - "19": "Action", - "21": "Adventure", - "84": "Design & Illustration", - "87": "Utilities", - "113": "Free to Play", - "122": "RPG", - "128": "Massively Multiplayer", - "492": "Indie", - "493": "Early Access", - "597": "Casual", - "599": "Simulation", - "699": "Racing", - "701": "Sports", - "784": "Video Production", - "809": "Photo Editing", - "872": "Animation & Modeling", - "1027": "Audio Production", - "1036": "Education", - "1038": "Web Publishing", - "1445": "Software Training", - "1616": "Trains", - "1621": "Music", - "1625": "Platformer", - "1628": "Metroidvania", - "1638": "Dog", - "1643": "Building", - "1644": "Driving", - "1645": "Tower Defense", - "1646": "Hack and Slash", - "1647": "Western", - "1649": "GameMaker", - "1651": "Satire", - "1654": "Relaxing", - "1659": "Zombies", - "1662": "Survival", - "1663": "FPS", - "1664": "Puzzle", - "1665": "Match 3", - "1666": "Card Game", - "1667": "Horror", - "1669": "Moddable", - "1670": "4X", - "1671": "Superhero", - "1673": "Aliens", - "1674": "Typing", - "1676": "RTS", - "1677": "Turn-Based", - "1678": "War", - "1680": "Heist", - "1681": "Pirates", - "1684": "Fantasy", - "1685": "Co-op", - "1687": "Stealth", - "1688": "Ninja", - "1693": "Classic", - "1695": "Open World", - "1697": "Third Person", - "1698": "Point & Click", - "1702": "Crafting", - "1708": "Tactical", - "1710": "Surreal", - "1714": "Psychedelic", - "1716": "Roguelike", - "1717": "Hex Grid", - "1718": "MOBA", - "1719": "Comedy", - "1720": "Dungeon Crawler", - "1721": "Psychological Horror", - "1723": "Action RTS", - "1730": "Sokoban", - "1732": "Voxel", - "1733": "Unforgiving", - "1734": "Fast-Paced", - "1736": "LEGO", - "1738": "Hidden Object", - "1741": "Turn-Based Strategy", - "1742": "Story Rich", - "1743": "Fighting", - "1746": "Basketball", - "1751": "Comic Book", - "1752": "Rhythm", - "1753": "Skateboarding", - "1754": "MMORPG", - "1755": "Space", - "1756": "Great Soundtrack", - "1759": "Perma Death", - "1770": "Board Game", - "1773": "Arcade", - "1774": "Shooter", - "1775": "PvP", - "1777": "Steampunk", - "3796": "Based On A Novel", - "3798": "Side Scroller", - "3799": "Visual Novel", - "3810": "Sandbox", - "3813": "Real Time Tactics", - "3814": "Third-Person Shooter", - "3834": "Exploration", - "3835": "Post-apocalyptic", - "3839": "First-Person", - "3841": "Local Co-Op", - "3843": "Online Co-Op", - "3854": "Lore-Rich", - "3859": "Multiplayer", - "3871": "2D", - "3877": "Precision Platformer", - "3878": "Competitive", - "3916": "Old School", - "3920": "Cooking", - "3934": "Immersive", - "3942": "Sci-fi", - "3952": "Gothic", - "3955": "Character Action Game", - "3959": "Roguelite", - "3964": "Pixel Graphics", - "3965": "Epic", - "3968": "Physics", - "3978": "Survival Horror", - "3987": "Historical", - "3993": "Combat", - "4004": "Retro", - "4018": "Vampire", - "4026": "Difficult", - "4036": "Parkour", - "4046": "Dragons", - "4057": "Magic", - "4064": "Thriller", - "4085": "Anime", - "4094": "Minimalist", - "4102": "Combat Racing", - "4106": "Action-Adventure", - "4115": "Cyberpunk", - "4136": "Funny", - "4137": "Transhumanism", - "4145": "Cinematic", - "4150": "World War II", - "4155": "Class-Based", - "4158": "Beat 'em up", - "4161": "Real-Time", - "4166": "Atmospheric", - "4168": "Military", - "4172": "Medieval", - "4175": "Realistic", - "4182": "Singleplayer", - "4184": "Chess", - "4190": "Addictive", - "4191": "3D", - "4195": "Cartoony", - "4202": "Trading", - "4231": "Action RPG", - "4234": "Short", - "4236": "Loot", - "4242": "Episodic", - "4252": "Stylized", - "4255": "Shoot 'Em Up", - "4291": "Spaceships", - "4295": "Futuristic", - "4305": "Colorful", - "4325": "Turn-Based Combat", - "4328": "City Builder", - "4342": "Dark", - "4345": "Gore", - "4364": "Grand Strategy", - "4376": "Assassin", - "4400": "Abstract", - "4434": "JRPG", - "4474": "CRPG", - "4486": "Choose Your Own Adventure", - "4508": "Co-op Campaign", - "4520": "Farming", - "4559": "Quick-Time Events", - "4562": "Cartoon", - "4598": "Alternate History", - "4604": "Dark Fantasy", - "4608": "Swordplay", - "4637": "Top-Down Shooter", - "4667": "Violent", - "4684": "Wargame", - "4695": "Economy", - "4700": "Movie", - "4711": "Replay Value", - "4726": "Cute", - "4736": "2D Fighter", - "4747": "Character Customization", - "4754": "Politics", - "4758": "Twin Stick Shooter", - "4777": "Spectacle fighter", - "4791": "Top-Down", - "4821": "Mechs", - "4835": "6DOF", - "4840": "4 Player Local", - "4845": "Capitalism", - "4853": "Political", - "4878": "Parody", - "4885": "Bullet Hell", - "4947": "Romance", - "4975": "2.5D", - "4994": "Naval Combat", - "5030": "Dystopian", - "5055": "eSports", - "5094": "Narration", - "5125": "Procedural Generation", - "5153": "Kickstarter", - "5154": "Score Attack", - "5160": "Dinosaurs", - "5179": "Cold War", - "5186": "Psychological", - "5228": "Blood", - "5230": "Sequel", - "5300": "God Game", - "5310": "Games Workshop", - "5348": "Mod", - "5350": "Family Friendly", - "5363": "Destruction", - "5372": "Conspiracy", - "5379": "2D Platformer", - "5382": "World War I", - "5390": "Time Attack", - "5395": "3D Platformer", - "5407": "Benchmark", - "5411": "Beautiful", - "5432": "Programming", - "5502": "Hacking", - "5537": "Puzzle Platformer", - "5547": "Arena Shooter", - "5577": "RPGMaker", - "5608": "Emotional", - "5611": "Mature", - "5613": "Detective", - "5652": "Collectathon", - "5673": "Modern", - "5708": "Remake", - "5711": "Team-Based", - "5716": "Mystery", - "5727": "Baseball", - "5752": "Robots", - "5765": "Gun Customization", - "5794": "Science", - "5796": "Bullet Time", - "5851": "Isometric", - "5900": "Walking Simulator", - "5914": "Tennis", - "5923": "Dark Humor", - "5941": "Reboot", - "5981": "Mining", - "5984": "Drama", - "6041": "Horses", - "6052": "Noir", - "6129": "Logic", - "6214": "Birds", - "6276": "Inventory Management", - "6310": "Diplomacy", - "6378": "Crime", - "6426": "Choices Matter", - "6506": "3D Fighter", - "6621": "Pinball", - "6625": "Time Manipulation", - "6650": "Nudity", - "6691": "1990's", - "6702": "Mars", - "6730": "PvE", - "6815": "Hand-drawn", - "6869": "Nonlinear", - "6910": "Naval", - "6915": "Martial Arts", - "6948": "Rome", - "6971": "Multiple Endings", - "7038": "Golf", - "7107": "Real-Time with Pause", - "7108": "Party", - "7113": "Crowdfunded", - "7178": "Party Game", - "7208": "Female Protagonist", - "7250": "Linear", - "7309": "Skiing", - "7328": "Bowling", - "7332": "Base Building", - "7368": "Local Multiplayer", - "7423": "Sniper", - "7432": "Lovecraftian", - "7478": "Illuminati", - "7481": "Controller", - "7556": "Dice", - "7569": "Grid-Based Movement", - "7622": "Offroad", - "7702": "Narrative", - "7743": "1980s", - "7782": "Cult Classic", - "7918": "Dwarf", - "7926": "Artificial Intelligence", - "7948": "Soundtrack", - "8013": "Software", - "8075": "TrackIR", - "8093": "Minigames", - "8122": "Level Editor", - "8253": "Music-Based Procedural Generation", - "8369": "Investigation", - "8461": "Well-Written", - "8666": "Runner", - "8945": "Resource Management", - "9130": "Hentai", - "9157": "Underwater", - "9204": "Immersive Sim", - "9271": "Trading Card Game", - "9541": "Demons", - "9551": "Dating Sim", - "9564": "Hunting", - "9592": "Dynamic Narration", - "9803": "Snow", - "9994": "Experience", - "10235": "Life Sim", - "10383": "Transportation", - "10397": "Memes", - "10437": "Trivia", - "10679": "Time Travel", - "10695": "Party-Based RPG", - "10808": "Supernatural", - "10816": "Split Screen", - "11014": "Interactive Fiction", - "11095": "Boss Rush", - "11104": "Vehicular Combat", - "11123": "Mouse only", - "11333": "Villain Protagonist", - "11634": "Vikings", - "12057": "Tutorial", - "12095": "Sexual Content", - "12190": "Boxing", - "12286": "Warhammer 40K", - "12472": "Management", - "13070": "Solitaire", - "13190": "America", - "13276": "Tanks", - "13382": "Archery", - "13577": "Sailing", - "13782": "Experimental", - "13906": "Game Development", - "14139": "Turn-Based Tactics", - "14153": "Dungeons & Dragons", - "14720": "Nostalgia", - "14906": "Intentionally Awkward Controls", - "15045": "Flight", - "15172": "Conversation", - "15277": "Philosophical", - "15339": "Documentary", - "15564": "Fishing", - "15868": "Motocross", - "15954": "Silent Protagonist", - "16094": "Mythology", - "16250": "Gambling", - "16598": "Space Sim", - "16689": "Time Management", - "17015": "Werewolves", - "17305": "Strategy RPG", - "17337": "Lemmings", - "17389": "Tabletop", - "17770": "Asynchronous Multiplayer", - "17894": "Cats", - "17927": "Pool", - "18594": "FMV", - "19568": "Cycling", - "19780": "Submarine", - "19995": "Dark Comedy", - "21006": "Underground", - "21491": "Demo Available", - "21725": "Tactical RPG", - "21978": "VR", - "22602": "Agriculture", - "22955": "Mini Golf", - "24003": "Word Game", - "24904": "NSFW", - "25085": "Touch-Friendly", - "26921": "Political Sim", - "27758": "Voice Control", - "28444": "Snowboarding", - "29363": "3D Vision", - "29482": "Souls-like", - "29855": "Ambient", - "30358": "Nature", - "30927": "Fox", - "31275": "Text-Based", - "31579": "Otome", - "32322": "Deckbuilding", - "33572": "Mahjong", - "35079": "Job Simulator", - "42089": "Jump Scare", - "42329": "Coding", - "42804": "Action Roguelike", - "44868": "LGBTQ+", - "47827": "Wrestling", - "49213": "Rugby", - "51306": "Foreign", - "56690": "On-Rails Shooter", - "61357": "Electronic Music", - "65443": "Adult Content", - "71389": "Spelling", - "87918": "Farming Sim", - "91114": "Shop Keeper", - "92092": "Jet", - "96359": "Skating", - "97376": "Cozy", - "102530": "Elf", - "117648": "8-bit Music", - "123332": "Bikes", - "129761": "ATV", - "143739": "Electronic", - "150626": "Gaming", - "158638": "Cricket", - "176981": "Battle Royale", - "180368": "Faith", - "189941": "Instrumental Music", - "198631": "Mystery Dungeon", - "198913": "Motorbike", - "220585": "Colony Sim", - "233824": "Feature Film", - "252854": "BMX", - "255534": "Automation", - "323922": "Musou", - "324176": "Hockey", - "337964": "Rock Music", - "348922": "Steam Machine", - "353880": "Looter Shooter", - "363767": "Snooker", - "379975": "Clicker", - "454187": "Traditional Roguelike", - "552282": "Wholesome", - "603297": "Hardware", - "615955": "Idler", - "620519": "Hero Shooter", - "745697": "Social Deduction", - "769306": "Escape Room", - "776177": "360 Video", - "791774": "Card Battler", - "847164": "Volleyball", - "856791": "Asymmetric VR", - "916648": "Creature Collector", - "922563": "Roguevania", - "1003823": "Profile Features Limited", - "1023537": "Boomer Shooter", - "1084988": "Auto Battler", - "1091588": "Roguelike Deckbuilder", - "1100686": "Outbreak Sim", - "1100687": "Automobile Sim", - "1100688": "Medical Sim", - "1100689": "Open World Survival Craft", - "1199779": "Extraction Shooter", - "1220528": "Hobby Sim", - "1254546": "Football (Soccer)", - "1254552": "Football (American)", - "1368160": "AI Content Disclosed", - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/client/types.ts b/cloud/packages/core/src/client/types.ts deleted file mode 100644 index 38903500..00000000 --- a/cloud/packages/core/src/client/types.ts +++ /dev/null @@ -1,600 +0,0 @@ -export interface SteamApp { - /** Steam application ID */ - appid: number; - - /** Array of Steam IDs that own this app */ - owner_steamids: string[]; - - /** Name of the game/application */ - name: string; - - /** Filename of the game's capsule image */ - capsule_filename: string; - - /** Hash value for the game's icon */ - img_icon_hash: string; - - /** Reason code for exclusion (0 indicates no exclusion) */ - exclude_reason: number; - - /** Unix timestamp when the app was acquired */ - rt_time_acquired: number; - - /** Unix timestamp when the app was last played */ - rt_last_played: number; - - /** Total playtime in seconds */ - rt_playtime: number; - - /** Type identifier for the app (1 = game) */ - app_type: number; - - /** Array of content descriptor IDs */ - content_descriptors?: number[]; -} - -export interface SteamApiResponse { - response: { - apps: SteamApp[]; - owner_steamid: string; - }; -} - -export interface SteamAppDataResponse { - data: Record; - status: string; -} - -export interface SteamAppEntry { - _change_number: number; - _missing_token: boolean; - _sha: string; - _size: number; - appid: string; - common: CommonData; - config: AppConfig; - depots: AppDepots; - extended: AppExtended; - ufs: UFSData; -} - -export interface CommonData { - associations: Record; - category: Record; - clienticon: string; - clienttga: string; - community_hub_visible: string; - community_visible_stats: string; - content_descriptors: Record; - controller_support?: string; - controllertagwizard: string; - gameid: string; - genres: Record; - header_image: Record; - icon: string; - languages: Record; - library_assets: LibraryAssets; - library_assets_full: LibraryAssetsFull; - metacritic_fullurl: string; - metacritic_name: string; - metacritic_score: string; - name: string; - name_localized: Partial>; - osarch: string; - osextended: string; - oslist: string; - primary_genre: string; - releasestate: string; - review_percentage: string; - review_score: string; - small_capsule: Record; - steam_deck_compatibility: SteamDeckCompatibility; - steam_release_date: string; - store_asset_mtime: string; - store_tags: Record; - supported_languages: Record< - string, - { - full_audio?: string; - subtitles?: string; - supported?: string; - } - >; - type: string; -} - -export interface LibraryAssets { - library_capsule: string; - library_header: string; - library_hero: string; - library_logo: string; - logo_position: LogoPosition; -} - -export interface LogoPosition { - height_pct: string; - pinned_position: string; - width_pct: string; -} - -export interface LibraryAssetsFull { - library_capsule: ImageSet; - library_header: ImageSet; - library_hero: ImageSet; - library_logo: ImageSet & { logo_position: LogoPosition }; - [key: string]: any -} - -export interface ImageSet { - image: Record; - image2x?: Record; -} - -export interface SteamDeckCompatibility { - category: string; - configuration: Record; - test_timestamp: string; - tested_build_id: string; - tests: Record; -} - -export interface AppConfig { - installdir: string; - launch: Record< - string, - { - executable: string; - type: string; - arguments?: string; - description?: string; - description_loc?: Record; - config?: { - betakey: string; - }; - } - >; - steamcontrollertemplateindex: string; - steamdecktouchscreen: string; -} - -export interface AppDepots { - branches: AppDepotBranches; - privatebranches: Record; - [depotId: string]: DepotEntry - | AppDepotBranches - | Record; -} - - -export interface DepotEntry { - manifests: { - public: { - download: string; - gid: string; - size: string; - }; - }; -} - -export interface AppDepotBranches { - [branchName: string]: { - buildid: string; - timeupdated: string; - }; -} - -export interface AppExtended { - additional_dependencies: Array<{ - dest_os: string; - h264: string; - src_os: string; - }>; - developer: string; - dlcavailableonstore: string; - homepage: string; - listofdlc: string; - publisher: string; -} - -export interface UFSData { - maxnumfiles: string; - quota: string; - savefiles: Array<{ - path: string; - pattern: string; - recursive: string; - root: string; - }>; -} - -export type LanguageCode = - | "english" - | "french" - | "german" - | "italian" - | "japanese" - | "koreana" - | "polish" - | "russian" - | "schinese" - | "tchinese" - | "brazilian" - | "spanish"; - -export interface Screenshot { - appid: number; - id: number; - filename: string; - all_ages: string; - normalized_name: string; -} - -export interface Category { - strDisplayName: string; -} - -export interface ReviewSummary { - strReviewSummary: string; - cReviews: number; - cRecommendationsPositive: number; - cRecommendationsNegative: number; - nReviewScore: number; -} - -export interface GameDetailsResponse { - strReleaseDate: string; - strDescription: string; - rgScreenshots: Screenshot[]; - rgCategories: Category[]; - strGenres?: string; - strFullDescription: string; - strMicroTrailerURL: string; - ReviewSummary: ReviewSummary; -} - -// Define the TypeScript interfaces -export interface Tag { - tagid: number; - name: string; -} - -export interface TagWithSlug { - name: string; - slug: string; - type: string; -} - -export interface StoreTags { - [key: string]: string; // Index signature for numeric string keys to tag ID strings -} - - -export interface GameTagsResponse { - tags: Tag[]; - success: number; - rwgrsn: number; -} - -export type GenreType = { - type: 'genre'; - name: string; - slug: string; -}; - -export interface AppInfo { - name: string; - slug: string; - images: { - logo: string; - backdrop: string; - poster: string; - banner: string; - screenshots: string[]; - icon: string; - } - links: string[] | null; - score: number; - id: string; - releaseDate: Date; - description: string | null; - compatibility: "low" | "mid" | "high" | "unknown"; - controllerSupport: "partial" | "full" | "unknown"; - primaryGenre: string | null; - size: { downloadSize: number; sizeOnDisk: number }; - tags: Array<{ name: string; slug: string; type: "tag" }>; - genres: Array<{ type: "genre"; name: string; slug: string }>; - categories: Array<{ name: string; slug: string; type: "categorie" }>; - franchises: Array<{ name: string; slug: string; type: "franchise" }>; - developers: Array<{ name: string; slug: string; type: "developer" }>; - publishers: Array<{ name: string; slug: string; type: "publisher" }>; -} - -export type ImageType = - | 'screenshot' - | 'boxArt' - | 'banner' - | 'backdrop' - | 'icon' - | 'logo' - | 'poster' - | 'heroArt'; - -export interface ImageInfo { - type: ImageType; - position: number; - hash: string; - sourceUrl: string | null; - format?: string; - averageColor: { hex: string; isDark: boolean }; - dimensions: { width: number; height: number }; - fileSize: number; - buffer: Buffer; -} - -export interface CompareOpts { - /** Pixelmatch color threshold (0–1). Default: 0.1 */ - threshold?: number; - /** If true, return an image buffer of the diff map. Default: false */ - diffOutput?: boolean; -} - -export interface CompareResult { - diffRatio: number; - /** Present only if `diffOutput: true` */ - diffBuffer?: Buffer; -} - -export interface Shot { - url: string; - buffer: Buffer; -} - -export interface RankedShot { - url: string; - score: number; -} - -export interface SteamPlayerSummaryResponse { - response: { - players: SteamPlayerSummary[]; - }; -} - -export interface SteamPlayerSummary { - steamid: string; - communityvisibilitystate: number; - profilestate?: number; - personaname: string; - profileurl: string; - avatar: string; - avatarmedium: string; - avatarfull: string; - avatarhash: string; - lastlogoff?: number; - personastate: number; - realname?: string; - primaryclanid?: string; - timecreated: number; - personastateflags?: number; - loccountrycode?: string; -} - -export interface SteamPlayerBansResponse { - players: SteamPlayerBan[]; -} - -export interface SteamPlayerBan { - SteamId: string; - CommunityBanned: boolean; - VACBanned: boolean; - NumberOfVACBans: number; - DaysSinceLastBan: number; - NumberOfGameBans: number; - EconomyBan: 'none' | 'probation' | 'banned'; // Enum based on known possible values -} - -export type SteamAccount = { - id: string; - name: string; - realName: string | null; - steamMemberSince: Date; - avatarHash: string; - limitations: { - isLimited: boolean; - tradeBanState: 'none' | 'probation' | 'banned'; - isVacBanned: boolean; - visibilityState: number; - privacyState: 'public' | 'private' | 'friendsonly'; - }; - profileUrl: string; - lastSyncedAt: Date; -}; - -export interface SteamFriendsListResponse { - friendslist: { - friends: SteamFriend[]; - }; -} - -export interface SteamFriend { - steamid: string; - relationship: 'friend'; // could expand this if Steam ever adds more types - friend_since: number; // Unix timestamp (seconds) -} - -export interface SteamOwnedGamesResponse { - response: { - game_count: number; - games: SteamOwnedGame[]; - }; -} - -export interface SteamOwnedGame { - appid: number; - name: string; - playtime_forever: number; - img_icon_url: string; - - playtime_windows_forever?: number; - playtime_mac_forever?: number; - playtime_linux_forever?: number; - playtime_deck_forever?: number; - - rtime_last_played?: number; // Unix timestamp - content_descriptorids?: number[]; - playtime_disconnected?: number; - has_community_visible_stats?: boolean; -} - -/** - * The shape of the parsed Steam profile information. - */ -export interface ProfileInfo { - steamID64: string; - isLimited: boolean; - privacyState: 'public' | 'private' | 'friendsonly' | string; - visibility: string; -} - -export interface SteamStoreResponse { - response: { - store_items: SteamStoreItem[]; - }; -} - -export interface SteamStoreItem { - item_type: number; - id: number; - success: number; - visible: boolean; - name: string; - store_url_path: string; - appid: number; - type: number; - tagids: number[]; - categories: { - supported_player_categoryids?: number[]; - feature_categoryids?: number[]; - controller_categoryids?: number[]; - }; - reviews: { - summary_filtered: { - review_count: number; - percent_positive: number; - review_score: number; - review_score_label: string; - }; - }; - basic_info: { - short_description?: string; - publishers: SteamCreator[]; - developers: SteamCreator[]; - franchises?: SteamCreator[]; - }; - tags: { - tagid: number; - weight: number; - }[]; - assets: SteamAssets; - assets_without_overrides: SteamAssets; - release: { - steam_release_date: number; - }; - platforms: { - windows: boolean; - mac: boolean; - steamos_linux: boolean; - vr_support: Record; - steam_deck_compat_category?: number; - steam_os_compat_category?: number; - }; - best_purchase_option: PurchaseOption; - purchase_options: PurchaseOption[]; - screenshots: { - all_ages_screenshots: { - filename: string; - ordinal: number; - }[]; - }; - trailers: { - highlights: Trailer[]; - }; - supported_languages: SupportedLanguage[]; - full_description: string; - links?: { - link_type: number; - url: string; - }[]; -} - -export interface SteamCreator { - name: string; - creator_clan_account_id: number; -} - -export interface SteamAssets { - asset_url_format: string; - main_capsule: string; - small_capsule: string; - header: string; - page_background: string; - hero_capsule: string; - hero_capsule_2x: string; - library_capsule: string; - library_capsule_2x: string; - library_hero: string; - library_hero_2x: string; - community_icon: string; - page_background_path: string; - raw_page_background: string; -} - -export interface PurchaseOption { - packageid?: number; - bundleid?: number; - purchase_option_name: string; - final_price_in_cents: string; - original_price_in_cents: string; - formatted_final_price: string; - formatted_original_price: string; - discount_pct: number; - active_discounts: ActiveDiscount[]; - user_can_purchase_as_gift: boolean; - hide_discount_pct_for_compliance: boolean; - included_game_count: number; - bundle_discount_pct?: number; - price_before_bundle_discount?: string; - formatted_price_before_bundle_discount?: string; -} - -export interface ActiveDiscount { - discount_amount: string; - discount_description: string; - discount_end_date: number; -} - -export interface Trailer { - trailer_name: string; - trailer_url_format: string; - trailer_category: number; - trailer_480p: TrailerFile[]; - trailer_max: TrailerFile[]; - microtrailer: TrailerFile[]; - screenshot_medium: string; - screenshot_full: string; - trailer_base_id: number; - all_ages: boolean; -} - -export interface TrailerFile { - filename: string; - type: string; -} - -export interface SupportedLanguage { - elanguage: number; - eadditionallanguage: number; - supported: boolean; - full_audio: boolean; - subtitles: boolean; -} diff --git a/cloud/packages/core/src/client/utils.ts b/cloud/packages/core/src/client/utils.ts deleted file mode 100644 index 0bbc1f67..00000000 --- a/cloud/packages/core/src/client/utils.ts +++ /dev/null @@ -1,524 +0,0 @@ -import type { - Tag, - StoreTags, - AppDepots, - GenreType, - LibraryAssetsFull, - DepotEntry, - CompareOpts, - CompareResult, - RankedShot, - Shot, - ProfileInfo, -} from "./types"; -import crypto from 'crypto'; -import pLimit from 'p-limit'; -import { PNG } from 'pngjs'; -import pixelmatch from 'pixelmatch'; -import { LRUCache } from 'lru-cache'; -import sanitizeHtml from 'sanitize-html'; -import { Agent as HttpAgent } from 'http'; -import { Agent as HttpsAgent } from 'https'; -import { parseStringPromise } from "xml2js"; -import sharp, { type Metadata } from 'sharp'; -import AbortController from 'abort-controller'; -import fetch, { RequestInit } from 'node-fetch'; -import { FastAverageColor } from 'fast-average-color'; - -const fac = new FastAverageColor() -// --- Configuration --- -const httpAgent = new HttpAgent({ keepAlive: true, maxSockets: 50 }); -const httpsAgent = new HttpsAgent({ keepAlive: true, maxSockets: 50 }); -const downloadCache = new LRUCache({ - max: 100, - ttl: 1000 * 60 * 30, // 30-minute expiry - allowStale: false, -}); -const downloadLimit = pLimit(10); // max concurrent downloads -const compareCache = new LRUCache({ - max: 50, - ttl: 1000 * 60 * 10, // 10-minute expiry -}); - -export namespace Utils { - export async function fetchBuffer(url: string, retries = 3): Promise { - if (downloadCache.has(url)) { - return downloadCache.get(url)!; - } - - let lastError: Error | null = null; - - for (let attempt = 0; attempt < retries; attempt++) { - try { - const controller = new AbortController(); - const id = setTimeout(() => controller.abort(), 15_000); - const res = await fetch(url, { - signal: controller.signal, - agent: (_parsed) => _parsed.protocol === 'http:' ? httpAgent : httpsAgent - } as RequestInit); - clearTimeout(id); - if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.status}`); - const buf = Buffer.from(await res.arrayBuffer()); - downloadCache.set(url, buf); - return buf; - } catch (error: any) { - lastError = error as Error; - console.warn(`Attempt ${attempt + 1} failed for ${url}: ${error.message}`); - if (attempt < retries - 1) { - await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, attempt))); - } - } - } - - throw lastError || new Error(`Failed to fetch ${url} after ${retries} attempts`); - } - - export async function getImageMetadata(buffer: Buffer) { - const hash = crypto.createHash('sha256').update(buffer).digest('hex'); - const { width, height, format, size: fileSize } = await sharp(buffer).metadata(); - if (!width || !height) throw new Error('Invalid dimensions'); - - const slice = await sharp(buffer) - .resize({ width: Math.min(width, 256) }) // cheap shrink - .ensureAlpha() - .raw() - .toBuffer(); - - const pixelArray = new Uint8Array(slice.buffer); - const { hex, isDark } = fac.prepareResult(fac.getColorFromArray4(pixelArray, { mode: "precision" })); - - return { hash, format, averageColor: { hex, isDark }, dimensions: { width, height }, fileSize, buffer }; - } - - // --- Optimized Box Art creation --- - export async function createBoxArtBuffer( - logoUrl: string, - backgroundUrl: string, - logoPercent = 0.9 - ): Promise { - const [bgBuf, logoBuf] = await Promise.all([ - downloadLimit(() => - fetchBuffer(backgroundUrl) - .catch(error => { - console.error(`Failed to download hero image from ${backgroundUrl}:`, error); - throw new Error(`Failed to create box art: hero image unavailable`); - }), - ), - downloadLimit(() => fetchBuffer(logoUrl) - .catch(error => { - console.error(`Failed to download logo image from ${logoUrl}:`, error); - throw new Error(`Failed to create box art: logo image unavailable`); - }), - ), - ]); - - const bgImage = sharp(bgBuf); - const meta = await bgImage.metadata(); - if (!meta.width || !meta.height) throw new Error('Invalid background dimensions'); - const size = Math.min(meta.width, meta.height); - const left = Math.floor((meta.width - size) / 2); - const top = Math.floor((meta.height - size) / 2); - const squareBg = bgImage.extract({ left, top, width: size, height: size }); - - // Resize logo - const logoTarget = Math.floor(size * logoPercent); - const logoResized = await sharp(logoBuf).resize({ width: logoTarget }).toBuffer(); - const logoMeta = await sharp(logoResized).metadata(); - if (!logoMeta.width || !logoMeta.height) throw new Error('Invalid logo dimensions'); - const logoLeft = Math.floor((size - logoMeta.width) / 2); - const logoTop = Math.floor((size - logoMeta.height) / 2); - - return await squareBg - .composite([{ input: logoResized, left: logoLeft, top: logoTop }]) - .jpeg({ quality: 100 }) - .toBuffer(); - } - - /** - * Fetch JSON from the given URL, with Steam-like headers - */ - export async function fetchApi(url: string, retries = 3): Promise { - let lastError: Error | null = null; - - for (let attempt = 0; attempt < retries; attempt++) { - try { - const response = await fetch(url, { - agent: (_parsed) => _parsed.protocol === 'http:' ? httpAgent : httpsAgent, - method: "GET", - headers: { - "User-Agent": "Steam 1291812 / iPhone", - "Accept-Language": "en-us", - }, - } as RequestInit); - if (!response.ok) { - throw new Error(`API error: ${response.status} ${response.statusText}`); - } - - return (await response.json()) as T; - } catch (error: any) { - lastError = error as Error; - // Only retry on network errors or 5xx status codes - if (error.message.includes('API error: 5') || !error.message.includes('API error')) { - console.warn(`Attempt ${attempt + 1} failed for ${url}: ${error.message}`); - await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, attempt))); - continue; - } - throw error; - } - } - - throw lastError || new Error(`Failed to fetch ${url} after ${retries} attempts`); - } - - /** - * Generate a slug from a name - */ - export function createSlug(name: string): string { - return name - .toLowerCase() - .normalize("NFKD") // Normalize to decompose accented characters - .replace(/[^\p{L}\p{N}\s-]/gu, '') // Keep Unicode letters, numbers, spaces, and hyphens - .replace(/\s+/g, '-') // Replace spaces with hyphens - .replace(/-+/g, '-') // Collapse multiple hyphens - .replace(/^-+|-+$/g, '') // Trim leading/trailing hyphens - .trim(); - } - - /** - * Compare a candidate screenshot against a UI-free baseline to find how much UI/HUD remains. - * - * @param baselineBuffer - PNG/JPEG buffer of the clean background. - * @param candidateBuffer - PNG/JPEG buffer of the screenshot to test. - * @param opts - Options. - * @returns Promise resolving to diff ratio (and optional diff image). - */ - export async function compareWithBaseline( - baselineBuffer: Buffer, - candidateBuffer: Buffer, - opts: CompareOpts = {} - ): Promise { - // Generate cache key from buffer hashes - const baseHash = crypto.createHash('md5').update(baselineBuffer).digest('hex'); - const candHash = crypto.createHash('md5').update(candidateBuffer).digest('hex'); - const optsKey = JSON.stringify(opts); - const cacheKey = `${baseHash}:${candHash}:${optsKey}`; - - // Check cache - if (compareCache.has(cacheKey)) { - return compareCache.get(cacheKey)!; - } - - const { threshold = 0.1, diffOutput = false } = opts; - - // Get dimensions of baseline - const baseMeta: Metadata = await sharp(baselineBuffer).metadata(); - if (!baseMeta.width || !baseMeta.height) { - throw new Error('Invalid baseline dimensions'); - } - - // Produce PNG buffers of same size - const [pngBaseBuf, pngCandBuf] = await Promise.all([ - sharp(baselineBuffer).png().toBuffer(), - sharp(candidateBuffer) - .resize(baseMeta.width, baseMeta.height) - .png() - .toBuffer(), - ]); - - const imgBase = PNG.sync.read(pngBaseBuf); - const imgCand = PNG.sync.read(pngCandBuf); - const diffImg = new PNG({ width: baseMeta.width, height: baseMeta.height }); - - const numDiff = pixelmatch( - imgBase.data, - imgCand.data, - diffImg.data, - baseMeta.width, - baseMeta.height, - { threshold } - ); - - const total = baseMeta.width * baseMeta.height; - const diffRatio = numDiff / total; - - const result: CompareResult = { diffRatio }; - if (diffOutput) { - result.diffBuffer = PNG.sync.write(diffImg); - } - - compareCache.set(cacheKey, result); - return result; - } - - /** - * Given a baseline buffer and an array of screenshots, returns them sorted - * ascending by diffRatio (least UI first). - */ - export async function rankScreenshots( - baselineBuffer: Buffer, - shots: Shot[], - opts: CompareOpts = {} - ): Promise { - // Process up to 5 comparisons in parallel - const compareLimit = pLimit(5); - - // Run all comparisons with limited concurrency - const results = await Promise.all( - shots.map(shot => - compareLimit(async () => { - const { diffRatio } = await compareWithBaseline( - baselineBuffer, - shot.buffer, - opts - ); - return { url: shot.url, score: diffRatio }; - }) - ) - ); - - return results.sort((a, b) => a.score - b.score); - } - - // --- Helpers for URLs --- - export function getScreenshotUrls(screenshots: { appid: number; filename: string }[]): string[] { - return screenshots.map(s => `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${s.appid}/${s.filename}`); - } - - export function getAssetUrls(assets: LibraryAssetsFull, appid: number | string, header: string) { - const base = `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${appid}`; - return { - logo: `${base}/${assets.library_logo?.image2x?.english || assets.library_logo?.image?.english}`, - backdrop: `${base}/${assets.library_hero?.image2x?.english || assets.library_hero?.image?.english}`, - poster: `${base}/${assets.library_capsule?.image2x?.english || assets.library_capsule?.image?.english}`, - banner: `${base}/${assets.library_header?.image2x?.english || assets.library_header?.image?.english || header}`, - }; - } - - /** - * Compute a 0–5 score from positive/negative votes using a Wilson score confidence interval. - * This formula adjusts the raw ratio based on the total number of votes to account for - * statistical confidence. With few votes, the score regresses toward 2.5 (neutral). - * - * Compute a 0–5 score from positive/negative votes - */ - export function getRating(positive: number, negative: number): number { - const total = positive + negative; - if (!total) return 0; - const avg = positive / total; - // Apply Wilson score confidence adjustment and scale to 0-5 range - const score = avg - (avg - 0.5) * Math.pow(2, -Math.log10(total + 1)); - return Math.round(score * 5 * 10) / 10; - } - - export function getAssociationsByTypeWithSlug< - T extends "developer" | "publisher" - >( - associations: Record, - type: T - ): Array<{ name: string; slug: string; type: T }> { - return Object.values(associations) - .filter((a) => a.type === type) - .map((a) => ({ name: a.name.trim(), slug: createSlug(a.name.trim()), type })); - } - - export function compatibilityType(type?: string): "low" | "mid" | "high" | "unknown" { - switch (type) { - case "1": - return "high"; - case "2": - return "mid"; - case "3": - return "low"; - default: - return "unknown"; - } - } - - - export function estimateRatingFromSummary( - reviewCount: number, - percentPositive: number - ): number { - const positiveVotes = Math.round((percentPositive / 100) * reviewCount); - const negativeVotes = reviewCount - positiveVotes; - return getRating(positiveVotes, negativeVotes); - } - - export function mapGameTags< - T extends string = "tag" - >( - available: Tag[], - storeTags: StoreTags, - ): Array<{ name: string; slug: string; type: T }> { - const tagMap = new Map(available.map((t) => [t.tagid, t])); - const result: Array<{ name: string; slug: string; type: T }> = Object.values(storeTags) - .map((id) => tagMap.get(Number(id))) - .filter((t): t is Tag => Boolean(t)) - .map((t) => ({ name: t.name.trim(), slug: createSlug(t.name), type: 'tag' as T })); - - return result; - } - - export function createType< - T extends "developer" | "publisher" | "franchise" | "tag" | "categorie" | "genre" - >( - names: string[], - type: T - ) { - return names - .map(name => ({ - type, - name: name.trim(), - slug: createSlug(name.trim()) - })); - } - - /** - * Create a tag object with name, slug, and type - * @typeparam T Literal type of the `type` field (defaults to 'tag') - */ - export function createTag< - T extends string = 'tag' - >( - name: string, - type?: T - ): { name: string; slug: string; type: T } { - const tagType = (type ?? 'tag') as T; - return { - name: name.trim(), - slug: createSlug(name), - type: tagType, - }; - } - - export function capitalise(name: string) { - return name - .charAt(0) // first character - .toUpperCase() // make it uppercase - + name - .slice(1) // rest of the string - .toLowerCase(); - } - - function isDepotEntry(e: any): e is DepotEntry { - return ( - e != null && - typeof e === 'object' && - 'manifests' in e && - e.manifests != null && - typeof e.manifests.public?.download === 'string' - ); - } - - export function getPublicDepotSizes(depots: AppDepots) { - let download = 0; - let size = 0; - - for (const key of Object.keys(depots)) { - if (key === 'branches' || key === 'privatebranches') continue; - const entry = depots[key] as DepotEntry; - if (!isDepotEntry(entry)) { - continue; - } - - const dl = Number(entry.manifests.public.download); - const sz = Number(entry.manifests.public.size); - if (!Number.isFinite(dl) || !Number.isFinite(sz)) { - console.warn(`[getPublicDepotSizes] non-numeric size for depot ${key}`); - continue; - } - - download += dl; - size += sz; - } - - return { downloadSize: download, sizeOnDisk: size }; - } - - export function parseGenres(str: string): GenreType[] { - return str.split(',') - .map((g) => g.trim()) - .filter(Boolean) - .map((g) => ({ type: 'genre', name: g.trim(), slug: createSlug(g) })); - } - - export function getPrimaryGenre( - genres: GenreType[], - map: Record, - primaryId: string - ): string | null { - const idx = Object.keys(map).find((k) => map[k] === primaryId); - return idx !== undefined ? genres[Number(idx)]?.name : null; - } - - export function cleanDescription(input: string): string { - - const cleaned = sanitizeHtml(input, { - allowedTags: [], // no tags allowed - allowedAttributes: {}, // no attributes anywhere - textFilter: (text) => text.replace(/\s+/g, ' '), // collapse runs of whitespace - }); - - return cleaned.trim() - } - - /** - * Fetches and parses a single Steam community profile XML. - * @param steamIdOrVanity - The 64-bit SteamID or vanity name. - * @returns Promise resolving to ProfileInfo. - */ - export async function fetchProfileInfo( - steamIdOrVanity: string - ): Promise { - const isNumericId = /^\d+$/.test(steamIdOrVanity); - const path = isNumericId ? `profiles/${steamIdOrVanity}` : `id/${steamIdOrVanity}`; - const url = `https://steamcommunity.com/${path}/?xml=1`; - - const response = await fetch(url); - if (!response.ok) { - throw new Error(`Failed to fetch ${steamIdOrVanity}: HTTP ${response.status}`); - } - - const xml = await response.text(); - const { profile } = await parseStringPromise(xml, { - explicitArray: false, - trim: true, - mergeAttrs: true - }) as { profile: any }; - - // Extract fields (fall back to limitedAccount tag if needed) - const limitedFlag = profile.isLimitedAccount ?? profile.limitedAccount; - const isLimited = limitedFlag === '1'; - - return { - isLimited, - steamID64: profile.steamID64, - privacyState: profile.privacyState, - visibility: profile.visibilityState - }; - } - - /** - * Batch-fetches multiple Steam profiles in parallel. - * @param idsOrVanities - Array of SteamID64 strings or vanity names. - * @returns Promise resolving to a record mapping each input to its ProfileInfo or an error. - */ - export async function fetchProfilesInfo( - idsOrVanities: string[] - ): Promise> { - const results = await Promise.all( - idsOrVanities.map(async (input) => { - try { - const info = await fetchProfileInfo(input); - return { input, result: info }; - } catch (err) { - return { input, result: { error: (err as Error).message } }; - } - }) - ); - - return new Map( - results.map(({ input, result }) => [input, result] as [string, ProfileInfo | { error: string }]) - ); - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/common.ts b/cloud/packages/core/src/common.ts deleted file mode 100644 index 90114314..00000000 --- a/cloud/packages/core/src/common.ts +++ /dev/null @@ -1,10 +0,0 @@ -import "zod-openapi/extend"; -import { sql } from "drizzle-orm"; - -export namespace Common { - export const IdDescription = `Unique object identifier. -The format and length of IDs may change over time.`; - - export const now = () => sql`now()`; - export const utc = () => sql`now() at time zone 'utc'`; -} \ No newline at end of file diff --git a/cloud/packages/core/src/context.ts b/cloud/packages/core/src/context.ts deleted file mode 100644 index cfecf02f..00000000 --- a/cloud/packages/core/src/context.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AsyncLocalStorage } from "node:async_hooks"; - -export namespace Context { - export class NotFound extends Error {} - - export function create() { - const storage = new AsyncLocalStorage(); - return { - use() { - const result = storage.getStore(); - if (!result) { - throw new NotFound(); - } - return result; - }, - provide(value: T, fn: () => R) { - return storage.run(value, fn); - }, - }; - } -} diff --git a/cloud/packages/core/src/drizzle/index.ts b/cloud/packages/core/src/drizzle/index.ts deleted file mode 100644 index 9fbddbfc..00000000 --- a/cloud/packages/core/src/drizzle/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import ws from "ws"; -import { Resource } from "sst"; -import { memo } from "../utils"; -import { Context } from "../context"; -import { ExtractTablesWithRelations } from "drizzle-orm"; -import { Pool, neonConfig } from "@neondatabase/serverless"; -import { PgTransaction, PgTransactionConfig } from "drizzle-orm/pg-core"; -import { NeonQueryResultHKT, drizzle } from "drizzle-orm/neon-serverless"; - -neonConfig.webSocketConstructor = ws; - -export namespace Database { - function addPoolerSuffix(original: string): string { - const firstDotIndex = original.indexOf("."); - if (firstDotIndex === -1) return original + "-pooler"; - return ( - original.slice(0, firstDotIndex) + - "-pooler" + - original.slice(firstDotIndex) - ); - } - - const client = memo(() => { - const dbHost = addPoolerSuffix(Resource.Database.host); - const pool = new Pool({ - connectionString: `postgres://${Resource.Database.user}:${Resource.Database.password}@${dbHost}/${Resource.Database.name}?sslmode=require`, - }); - const db = drizzle(pool); - return db; - }); - - export type Transaction = PgTransaction< - NeonQueryResultHKT, - Record, - ExtractTablesWithRelations> - >; - - export type TxOrDb = Transaction | ReturnType; - - const TransactionContext = Context.create<{ - tx: TxOrDb; - effects: (() => void | Promise)[]; - }>(); - - export async function use(callback: (trx: TxOrDb) => Promise) { - try { - const { tx } = TransactionContext.use(); - return tx.transaction(callback); - } catch (err) { - if (err instanceof Context.NotFound) { - const effects: (() => void | Promise)[] = []; - const result = await TransactionContext.provide( - { - effects, - tx: client(), - }, - () => callback(client()), - ); - await Promise.all(effects.map((x) => x())); - return result; - } - throw err; - } - } - - export async function fn( - callback: (input: Input, trx: TxOrDb) => Promise, - ) { - return (input: Input) => use(async (tx) => callback(input, tx)); - } - - export async function effect(effect: () => any | Promise) { - try { - const { effects } = TransactionContext.use(); - effects.push(effect); - } catch { - await effect(); - } - } - - export async function transaction( - callback: (tx: TxOrDb) => Promise, - config?: PgTransactionConfig, - ) { - try { - const { tx } = TransactionContext.use(); - return callback(tx); - } catch (err) { - if (err instanceof Context.NotFound) { - const effects: (() => void | Promise)[] = []; - const result = await client().transaction(async (tx) => { - return TransactionContext.provide({ tx, effects }, () => - callback(tx), - ); - }, config); - await Promise.all(effects.map((x) => x())); - return result; - } - throw err; - } - } -} diff --git a/cloud/packages/core/src/drizzle/types.ts b/cloud/packages/core/src/drizzle/types.ts deleted file mode 100644 index 00f551d6..00000000 --- a/cloud/packages/core/src/drizzle/types.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { char, timestamp as rawTs } from "drizzle-orm/pg-core"; - -export const ulid = (name: string) => char(name, { length: 26 + 4 }); - -export const id = { - get id() { - return ulid("id").primaryKey().notNull(); - }, -}; - -export const teamID = { - get id() { - return ulid("id").notNull(); - }, - get teamID() { - return ulid("team_id").notNull(); - }, -}; - -export const userID = { - get id() { - return ulid("id").notNull(); - }, - get userID() { - return ulid("user_id").notNull(); - }, -}; - -export const utc = (name: string) => - rawTs(name, { - withTimezone: true, - // mode: "date" - }); - -export const timestamps = { - timeCreated: utc("time_created").notNull().defaultNow(), - timeUpdated: utc("time_updated").notNull().defaultNow(), - timeDeleted: utc("time_deleted"), -}; \ No newline at end of file diff --git a/cloud/packages/core/src/email/index.ts b/cloud/packages/core/src/email/index.ts deleted file mode 100644 index efdcb78d..00000000 --- a/cloud/packages/core/src/email/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Resource } from "sst"; -import { SESv2Client, SendEmailCommand } from "@aws-sdk/client-sesv2"; - -export namespace Email { - export const Client = new SESv2Client({}); - - export async function send( - from: string, - to: string, - subject: string, - body: string, - ) { - from = from + "@" + Resource.Email.sender; - console.log("sending email", subject, from, to); - await Client.send( - new SendEmailCommand({ - Destination: { - ToAddresses: [to], - }, - Content: { - Simple: { - Body: { - Text: { - Data: body, - }, - }, - Subject: { - Data: subject, - }, - }, - }, - FromEmailAddress: `Nestri <${from}>`, - }), - ); - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/error.ts b/cloud/packages/core/src/error.ts deleted file mode 100644 index 9cbf9333..00000000 --- a/cloud/packages/core/src/error.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { z } from "zod" - -/** -* Standard error response schema used for OpenAPI documentation -*/ -export const ErrorResponse = z - .object({ - type: z - .enum([ - "validation", - "authentication", - "forbidden", - "not_found", - "already_exists", - "rate_limit", - "internal", - ]) - .openapi({ - description: "The error type category", - examples: ["validation", "authentication"], - }), - code: z.string().openapi({ - description: "Machine-readable error code identifier", - examples: ["invalid_parameter", "missing_required_field", "unauthorized"], - }), - message: z.string().openapi({ - description: "Human-readable error message", - examples: ["The request was invalid", "Authentication required"], - }), - param: z - .string() - .optional() - .openapi({ - description: "The parameter that caused the error (if applicable)", - examples: ["email", "user_id", "team_id"], - }), - details: z.any().optional().openapi({ - description: "Additional error context information", - }), - }) - .openapi({ ref: "ErrorResponse" }); - -export type ErrorResponseType = z.infer; - -/** -* Standardized error codes for the API -*/ -export const ErrorCodes = { - // Validation errors (400) - Validation: { - MISSING_REQUIRED_FIELD: "missing_required_field", - ALREADY_EXISTS: "resource_already_exists", - TEAM_ALREADY_EXISTS: "team_already_exists", - INVALID_PARAMETER: "invalid_parameter", - INVALID_FORMAT: "invalid_format", - INVALID_STATE: "invalid_state", - IN_USE: "resource_in_use", - }, - - // Authentication errors (401) - Authentication: { - UNAUTHORIZED: "unauthorized", - INVALID_TOKEN: "invalid_token", - EXPIRED_TOKEN: "expired_token", - INVALID_CREDENTIALS: "invalid_credentials", - }, - - // Permission errors (403) - Permission: { - FORBIDDEN: "forbidden", - INSUFFICIENT_PERMISSIONS: "insufficient_permissions", - ACCOUNT_RESTRICTED: "account_restricted", - }, - - // Resource not found errors (404) - NotFound: { - RESOURCE_NOT_FOUND: "resource_not_found", - }, - - // Rate limit errors (429) - RateLimit: { - TOO_MANY_REQUESTS: "too_many_requests", - QUOTA_EXCEEDED: "quota_exceeded", - }, - - // Server errors (500) - Server: { - INTERNAL_ERROR: "internal_error", - SERVICE_UNAVAILABLE: "service_unavailable", - DEPENDENCY_FAILURE: "dependency_failure", - }, -}; - -/** -* Standard error that will be exposed to clients through API responses -*/ -export class VisibleError extends Error { - constructor( - public type: ErrorResponseType["type"], - public code: string, - public message: string, - public param?: string, - public details?: any, - ) { - super(message); - } - - /** - * Convert this error to an HTTP status code - */ - public statusCode(): number { - switch (this.type) { - case "validation": - return 400; - case "authentication": - return 401; - case "forbidden": - return 403; - case "not_found": - return 404; - case "already_exists": - return 409; - case "rate_limit": - return 429; - case "internal": - return 500; - } - } - - /** - * Convert this error to a standard response object - */ - public toResponse(): ErrorResponseType { - const response: ErrorResponseType = { - type: this.type, - code: this.code, - message: this.message, - }; - - if (this.param) response.param = this.param; - if (this.details) response.details = this.details; - - return response; - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/event.ts b/cloud/packages/core/src/event.ts deleted file mode 100644 index a2a79606..00000000 --- a/cloud/packages/core/src/event.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Actor } from "./actor"; -import { event } from "sst/event"; -import { ZodValidator } from "sst/event/validator"; - -export const createEvent = event.builder({ - validator: ZodValidator, - metadata() { - return { - actor: Actor.use(), - }; - }, -}); \ No newline at end of file diff --git a/cloud/packages/core/src/examples.ts b/cloud/packages/core/src/examples.ts deleted file mode 100644 index a4f121c3..00000000 --- a/cloud/packages/core/src/examples.ts +++ /dev/null @@ -1,275 +0,0 @@ -import { prefixes } from "./utils"; - -export namespace Examples { - export const Id = (prefix: keyof typeof prefixes) => - `${prefixes[prefix]}_XXXXXXXXXXXXXXXXXXXXXXXXX`; - - export const User = { - id: Id("user"),// Primary key - name: "John Doe", // Name (not null) - email: "johndoe@example.com",// Unique email or login (not null) - avatarUrl: "https://cdn.discordapp.com/avatars/xxxxxxx/xxxxxxx.png", - lastLogin: new Date("2025-04-26T20:11:08.155Z"), - polarCustomerID: "0bfcb712-df13-4454-81a8-fbee66eddca4" - } - - export const GPUType = { - id: Id("gpu"), - type: "hosted" as const, //or BYOG - Bring Your Own GPU - name: "RTX 4090" as const, // or RTX 3090, Intel Arc - performanceTier: 3, - maxResolution: "4k" - } - - export const Machine = { - id: Id("machine"), - ownerID: User.id, //or null if hosted - gpuID: GPUType.id, // or hosted - country: "Kenya", - countryCode: "KE", - timezone: "Africa/Nairobi", - location: { latitude: 36.81550, longitude: -1.28410 }, - fingerprint: "fc27f428f9ca47d4b41b707ae0c62090", - } - - export const SteamAccount = { - status: "online" as const, //offline,dnd(do not disturb) or playing - id: "74839300282033",// Steam ID - userID: User.id,// | null FK to User (null if not linked) - name: "JD The 65th", - username: "jdoe", - realName: "John Doe", - steamMemberSince: new Date("2010-01-26T21:00:00.000Z"), - avatarHash: "3a5e805fd4c1e04e26a97af0b9c6fab2dee91a19", - accountStatus: "new" as const, //active or pending - limitations: { - isLimited: false, - tradeBanState: "none" as const, - isVacBanned: false, - visibilityState: 3, - privacyState: "public" as const, - }, - profileUrl: "The65thJD", //"https://steamcommunity.com/id/XXXXXXXXXXXXXXXX/", - lastSyncedAt: new Date("2025-04-26T20:11:08.155Z") - }; - - export const Team = { - id: Id("team"),// Primary key - name: "John", // Team name (not null, unique) - maxMembers: 3, - inviteCode: "xwydjf", - ownerSteamID: SteamAccount.id, // FK to User who owns/created the team - members: [SteamAccount] - }; - - export const Member = { - id: Id("member"), - userID: User.id,//FK to Users (member) - steamID: SteamAccount.id, // FK to the Steam Account this member is used - teamID: Team.id,// FK to Teams - role: "adult" as const, // Role on the team, adult or child - }; - - export const ProductVariant = { - id: Id("variant"), - productID: Id("product"),// the product this variant is under - type: "fixed" as const, // or yearly or monthly, - price: 1999, - minutesPerDay: 3600, - polarProductID: "0bfcb712-df13-4454-81a8-fbee66eddca4" - } - - export const Product = { - id: Id("product"), - name: "Pro", - description: "For gamers who want to play on a better GPU and with 2 more friends", - maxMembers: Team.maxMembers,// Total number of people who can share this sub - isActive: true, - order: 2, - variants: [ProductVariant] - } - - export const Friend = { - ...Examples.SteamAccount, - user: Examples.User - } - - export const Subscription = { - id: Id("subscription"), - teamID: Team.id, - standing: "active" as const, //incomplete, incomplete_expired, trialing, active, past_due, canceled, unpaid - ownerID: User.id, - price: ProductVariant.price, - productVariantID: ProductVariant.id, - polarSubscriptionID: "0bfcb712-df13-4454-81a8-fbee66eddca4", - } - - export const SubscriptionUsage = { - id: Id("usage"), - machineID: Machine.id, // machine this session was used on - memberID: Member.id, // the team member who used it - subscriptionID: Subscription.id, - sessionID: Id("session"), - minutesUsed: 20, // Minutes used on the session - } - - export const Session = { - id: Id("session"), - memberID: Member.id, - machineID: Machine.id, - startTime: new Date("2025-02-23T23:39:52.249Z"), - endTime: null, // null if session is ongoing - gameID: Id("game"), - status: "active" as const, // active, completed, crashed - } - - export const GameGenre = { - type: "genre" as const, - slug: "action", - name: "Action" - } - - export const GameTag = { - type: "tag" as const, - slug: "single-player", - name: "Single Player" - } - - export const GameRating = { - body: "ESRB" as const, // or PEGI - age: 16, - descriptors: ["Blood", "Violence", "Strong Language"], - } - - export const DevelopmentTeam = { - type: "developer" as const, - name: "Remedy Entertainment", - slug: "remedy_entertainment", - } - - export const BaseGame = { - id: "1809540", - slug: "nine-sols", - name: "Nine Sols", - links:[ - "https://example.com" - ], - controllerSupport: "full" as const, - releaseDate: new Date("2024-05-29T06:53:24.000Z"), - compatibility: "high" as const, - size: { - downloadSize: 7907568608,// 7.91 GB - sizeOnDisk: 13176088178,// 13.18 GB - }, - primaryGenre: "Action", - score: 4.7, - description: "Nine Sols is a lore rich, hand-drawn 2D action-platformer featuring Sekiro-inspired deflection focused combat. Embark on a journey of eastern fantasy, explore the land once home to an ancient alien race, and follow a vengeful hero’s quest to slay the 9 Sols, formidable rulers of this forsaken realm.", - } - - export const Categories = { - genres: [ - { - name: "Action", - slug: "action" - }, - { - name: "Adventure", - slug: "adventure" - }, - { - name: "Indie", - slug: "indie" - } - ], - tags: [ - { - name: "Metroidvania", - slug: "metroidvania", - }, - { - name: "Souls-like", - slug: "souls-like", - }, - { - name: "Difficult", - slug: "difficult", - }, - ], - developers: [ - { - name: "RedCandleGames", - slug: "redcandlegames" - } - ], - publishers: [ - { - name: "RedCandleGames", - slug: "redcandlegames" - } - ], - franchises: [], - categories: [ - { - name: "Partial Controller", - slug: "partial-controller" - } - ] - } - - export const CommonImg = [ - { - hash: "db880dc2f0187bfe0c5d3c44a06d1002351eb3107970a83bf5667ffd3b369acd", - averageColor: { - hex: "#352c36", - isDark: true - }, - dimensions: { - width: 3840, - height: 2160 - }, - fileSize: 976004 - }, - { - hash: "99f603e41dd3efde21a145fd00c9f107025c09433c084a5e5005bc2ac30e46ea", - averageColor: { - hex: "#596774", - isDark: true - }, - dimensions: { - width: 2560, - height: 1440 - }, - fileSize: 895134 - }, - { - hash: "2c4193c19160392be01d08e6957ed682649117742c5abaa8c469e7408382572f", - averageColor: { - hex: "#444b5b", - isDark: true - }, - dimensions: { - width: 2560, - height: 1440 - }, - fileSize: 738701 - } - ] - - // type: "screenshots" as const, // or boxart(square), poster(vertical), superheroart(background), heroart(horizontal), logo, icon - export const Images = { - screenshots: CommonImg, - boxArts: CommonImg, - posters: CommonImg, - banners: CommonImg, - heroArts: CommonImg, - backdrops: CommonImg, - logos: CommonImg, - icons: CommonImg, - } - - export const Game = { - ...BaseGame, - ...Categories, - ...Images - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/friend/friend.sql.ts b/cloud/packages/core/src/friend/friend.sql.ts deleted file mode 100644 index 31420df9..00000000 --- a/cloud/packages/core/src/friend/friend.sql.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { timestamps, } from "../drizzle/types"; -import { steamTable } from "../steam/steam.sql"; -import { index, pgTable, primaryKey, varchar } from "drizzle-orm/pg-core"; - -export const friendTable = pgTable( - "friends_list", - { - ...timestamps, - steamID: varchar("steam_id", { length: 255 }) - .notNull() - .references(() => steamTable.id, { - onDelete: "cascade" - }), - friendSteamID: varchar("friend_steam_id", { length: 255 }) - .notNull() - .references(() => steamTable.id, { - onDelete: "cascade" - }), - }, - (table) => [ - primaryKey({ - columns: [table.steamID, table.friendSteamID] - }), - index("idx_friends_list_friend_steam_id").on(table.friendSteamID), - ] -); \ No newline at end of file diff --git a/cloud/packages/core/src/friend/index.ts b/cloud/packages/core/src/friend/index.ts deleted file mode 100644 index 031e7ec4..00000000 --- a/cloud/packages/core/src/friend/index.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { User } from "../user"; -import { Steam } from "../steam"; -import { Actor } from "../actor"; -import { Database } from "../drizzle"; -import { Examples } from "../examples"; -import { friendTable } from "./friend.sql"; -import { userTable } from "../user/user.sql"; -import { steamTable } from "../steam/steam.sql"; -import { createSelectSchema } from "drizzle-zod"; -import { and, eq, isNull, sql } from "drizzle-orm"; -import { groupBy, map, pipe, values } from "remeda"; -import { ErrorCodes, VisibleError } from "../error"; - -export namespace Friend { - export const Info = Steam.Info.extend({ - user: User.Info.nullable().openapi({ - description: "The user account that owns this Steam account", - example: Examples.User, - }), - }).openapi({ - ref: "Friend", - description: "Represents a friend's information stored on Nestri", - example: Examples.Friend, - }); - - export const InputInfo = createSelectSchema(friendTable).omit({ - timeCreated: true, - timeDeleted: true, - timeUpdated: true, - }); - - export type Info = z.infer; - export type InputInfo = z.infer; - - export const add = fn(InputInfo.partial({ steamID: true }), async (input) => - Database.transaction(async (tx) => { - const steamID = input.steamID ?? Actor.steamID(); - if (steamID === input.friendSteamID) { - throw new VisibleError( - "forbidden", - ErrorCodes.Validation.INVALID_PARAMETER, - "Cannot add yourself as a friend", - ); - } - - const results = await tx - .select() - .from(friendTable) - .where( - and( - eq(friendTable.steamID, steamID), - eq(friendTable.friendSteamID, input.friendSteamID), - isNull(friendTable.timeDeleted), - ), - ) - .execute(); - - if (results.length > 0) return null; - - await tx - .insert(friendTable) - .values({ - steamID, - friendSteamID: input.friendSteamID, - }) - .onConflictDoUpdate({ - target: [friendTable.steamID, friendTable.friendSteamID], - set: { timeDeleted: null }, - }); - - return steamID; - }), - ); - - export const end = fn(InputInfo, (input) => - Database.transaction(async (tx) => - tx - .update(friendTable) - .set({ timeDeleted: sql`now()` }) - .where( - and( - eq(friendTable.steamID, input.steamID), - eq(friendTable.friendSteamID, input.friendSteamID), - ), - ), - ), - ); - - export const list = () => - Database.transaction(async (tx) => - tx - .select({ - steam: steamTable, - user: userTable, - }) - .from(friendTable) - .innerJoin(steamTable, eq(friendTable.friendSteamID, steamTable.id)) - .leftJoin(userTable, eq(steamTable.userID, userTable.id)) - .where( - and( - eq(friendTable.steamID, Actor.steamID()), - isNull(friendTable.timeDeleted), - ), - ) - .limit(100) - .execute() - .then((rows) => serialize(rows)), - ); - - export const fromFriendID = fn( - InputInfo.shape.friendSteamID, - (friendSteamID) => - Database.transaction(async (tx) => - tx - .select({ - steam: steamTable, - user: userTable, - }) - .from(friendTable) - .innerJoin(steamTable, eq(friendTable.friendSteamID, steamTable.id)) - .leftJoin(userTable, eq(steamTable.userID, userTable.id)) - .where( - and( - eq(friendTable.steamID, Actor.steamID()), - eq(friendTable.friendSteamID, friendSteamID), - isNull(friendTable.timeDeleted), - ), - ) - .limit(1) - .execute() - .then((rows) => serialize(rows).at(0)), - ), - ); - - export const areFriends = fn(InputInfo.shape.friendSteamID, (friendSteamID) => - Database.transaction(async (tx) => { - const result = await tx - .select() - .from(friendTable) - .where( - and( - eq(friendTable.steamID, Actor.steamID()), - eq(friendTable.friendSteamID, friendSteamID), - isNull(friendTable.timeDeleted), - ), - ) - .limit(1) - .execute(); - - return result.length > 0; - }), - ); - - export function serialize( - input: { - user: typeof userTable.$inferSelect | null; - steam: typeof steamTable.$inferSelect; - }[], - ): z.infer[] { - return pipe( - input, - groupBy((row) => row.steam.id), - values(), - map((group) => ({ - ...Steam.serialize(group[0].steam), - user: group[0].user ? User.serialize(group[0].user!) : null, - })), - ); - } -} diff --git a/cloud/packages/core/src/game/game.sql.ts b/cloud/packages/core/src/game/game.sql.ts deleted file mode 100644 index 95a7f67b..00000000 --- a/cloud/packages/core/src/game/game.sql.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { timestamps } from "../drizzle/types"; -import { baseGamesTable } from "../base-game/base-game.sql"; -import { categoriesTable, CategoryTypeEnum } from "../categories/categories.sql"; -import { foreignKey, index, pgTable, primaryKey, varchar } from "drizzle-orm/pg-core"; - -export const gamesTable = pgTable( - 'games', - { - ...timestamps, - baseGameID: varchar('base_game_id', { length: 255 }) - .notNull() - .references(() => baseGamesTable.id, - { onDelete: "cascade" } - ), - categorySlug: varchar('category_slug', { length: 255 }) - .notNull(), - categoryType: CategoryTypeEnum("type").notNull() - }, - (table) => [ - primaryKey({ - columns: [table.baseGameID, table.categorySlug, table.categoryType] - }), - foreignKey({ - name: "games_categories_fkey", - columns: [table.categorySlug, table.categoryType], - foreignColumns: [categoriesTable.slug, categoriesTable.type], - }).onDelete("cascade"), - index("idx_games_category_slug").on(table.categorySlug), - index("idx_games_category_type").on(table.categoryType), - index("idx_games_category_slug_type").on( - table.categorySlug, - table.categoryType - ) - ] -); \ No newline at end of file diff --git a/cloud/packages/core/src/game/index.ts b/cloud/packages/core/src/game/index.ts deleted file mode 100644 index bf1b36b3..00000000 --- a/cloud/packages/core/src/game/index.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { Images } from "../images"; -import { Examples } from "../examples"; -import { BaseGame } from "../base-game"; -import { gamesTable } from "./game.sql"; -import { Categories } from "../categories"; -import { eq, and, isNull } from "drizzle-orm"; -import { createSelectSchema } from "drizzle-zod"; -import { imagesTable } from "../images/images.sql"; -import { baseGamesTable } from "../base-game/base-game.sql"; -import { groupBy, map, pipe, uniqueBy, values } from "remeda"; -import { categoriesTable } from "../categories/categories.sql"; -import { Database } from "../drizzle"; - -export namespace Game { - export const Info = z - .intersection(BaseGame.Info, Categories.Info, Images.Info) - .openapi({ - ref: "Game", - description: - "Detailed information about a game available in the Nestri library, including technical specifications, categories and metadata", - example: Examples.Game, - }); - - export type Info = z.infer; - - export const InputInfo = createSelectSchema(gamesTable).omit({ - timeCreated: true, - timeDeleted: true, - timeUpdated: true, - }); - - export const create = fn(InputInfo, (input) => - Database.transaction(async (tx) => { - const result = await tx - .select() - .from(gamesTable) - .where( - and( - eq(gamesTable.categorySlug, input.categorySlug), - eq(gamesTable.categoryType, input.categoryType), - eq(gamesTable.baseGameID, input.baseGameID), - isNull(gamesTable.timeDeleted), - ), - ) - .limit(1) - .execute() - .then((rows) => rows.at(0)); - - if (result) return result.baseGameID; - - await tx - .insert(gamesTable) - .values(input) - .onConflictDoUpdate({ - target: [ - gamesTable.categorySlug, - gamesTable.categoryType, - gamesTable.baseGameID, - ], - set: { timeDeleted: null }, - }); - - return input.baseGameID; - }), - ); - - export const fromID = fn(InputInfo.shape.baseGameID, (gameID) => - Database.transaction(async (tx) => - tx - .select({ - games: baseGamesTable, - categories: categoriesTable, - images: imagesTable, - }) - .from(gamesTable) - .innerJoin(baseGamesTable, eq(baseGamesTable.id, gamesTable.baseGameID)) - .leftJoin( - categoriesTable, - and( - eq(categoriesTable.slug, gamesTable.categorySlug), - eq(categoriesTable.type, gamesTable.categoryType), - ), - ) - .leftJoin( - imagesTable, - and( - eq(imagesTable.baseGameID, gamesTable.baseGameID), - isNull(imagesTable.timeDeleted), - ), - ) - .where( - and( - eq(gamesTable.baseGameID, gameID), - isNull(gamesTable.timeDeleted), - ), - ) - .execute() - .then((rows) => serialize(rows).at(0)), - ), - ); - - export function serialize( - input: { - games: typeof baseGamesTable.$inferSelect; - categories: typeof categoriesTable.$inferSelect | null; - images: typeof imagesTable.$inferSelect | null; - }[], - ): z.infer[] { - return pipe( - input, - groupBy((row) => row.games.id), - values(), - map((group) => { - const game = BaseGame.serialize(group[0].games); - const cats = uniqueBy( - group - .map((r) => r.categories) - .filter((c): c is typeof categoriesTable.$inferSelect => - Boolean(c), - ), - (c) => `${c.slug}:${c.type}`, - ); - const imgs = uniqueBy( - group - .map((r) => r.images) - .filter((c): c is typeof imagesTable.$inferSelect => Boolean(c)), - (c) => `${c.type}:${c.imageHash}:${c.position}`, - ); - const byType = Categories.serialize(cats); - const byImg = Images.serialize(imgs); - return { - ...game, - ...byType, - ...byImg, - }; - }), - ); - } -} diff --git a/cloud/packages/core/src/images/images.sql.ts b/cloud/packages/core/src/images/images.sql.ts deleted file mode 100644 index 7b90d6f6..00000000 --- a/cloud/packages/core/src/images/images.sql.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { z } from "zod"; -import { timestamps } from "../drizzle/types"; -import { baseGamesTable } from "../base-game/base-game.sql"; -import { index, integer, json, pgEnum, pgTable, primaryKey, text, varchar } from "drizzle-orm/pg-core"; - -export const ImageTypeEnum = pgEnum("image_type", ["heroArt", "icon", "logo", "banner", "poster", "boxArt", "screenshot", "backdrop"]) - -export const ImageDimensions = z.object({ - width: z.number().int(), - height: z.number().int(), -}) - -export const ImageColor = z.object({ - hex: z.string(), - isDark: z.boolean() -}) - -export type ImageColor = z.infer; -export type ImageDimensions = z.infer; - -export const imagesTable = pgTable( - "images", - { - ...timestamps, - type: ImageTypeEnum("type").notNull(), - imageHash: varchar("image_hash", { length: 255 }) - .notNull(), - baseGameID: varchar("base_game_id", { length: 255 }) - .notNull() - .references(() => baseGamesTable.id, { - onDelete: "cascade" - }), - sourceUrl: text("source_url"), // The BoxArt is source Url will always be null; - position: integer("position").notNull().default(0), - fileSize: integer("file_size").notNull(), - dimensions: json("dimensions").$type().notNull(), - extractedColor: json("extracted_color").$type().notNull(), - }, - (table) => [ - primaryKey({ - columns: [table.imageHash, table.type, table.baseGameID, table.position] - }), - index("idx_images_type").on(table.type), - index("idx_images_game_id").on(table.baseGameID), - ] -) \ No newline at end of file diff --git a/cloud/packages/core/src/images/index.ts b/cloud/packages/core/src/images/index.ts deleted file mode 100644 index 8329566d..00000000 --- a/cloud/packages/core/src/images/index.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { Database } from "../drizzle"; -import { Examples } from "../examples"; -import { createSelectSchema } from "drizzle-zod"; -import { ImageColor, ImageDimensions, imagesTable } from "./images.sql"; - -export namespace Images { - const Image = z.object({ - hash: z.string().openapi({ - description: - "A unique cryptographic hash identifier for the image, used for deduplication and URL generation", - example: Examples.CommonImg[0].hash, - }), - averageColor: ImageColor.openapi({ - description: - "The calculated dominant color of the image with light/dark classification, used for UI theming", - example: Examples.CommonImg[0].averageColor, - }), - dimensions: ImageDimensions.openapi({ - description: "The width and height dimensions of the image in pixels", - example: Examples.CommonImg[0].dimensions, - }), - fileSize: z.number().int().openapi({ - description: - "The size of the image file in bytes, used for storage and bandwidth calculations", - example: Examples.CommonImg[0].fileSize, - }), - }); - - export const Info = z - .object({ - screenshots: Image.array().openapi({ - description: - "In-game captured images showing actual gameplay, user interface, and key moments", - example: Examples.Images.screenshots, - }), - boxArts: Image.array().openapi({ - description: - "Square 1:1 aspect ratio artwork, typically used for store listings and thumbnails", - example: Examples.Images.boxArts, - }), - posters: Image.array().openapi({ - description: - "Vertical 2:3 aspect ratio promotional artwork, similar to movie posters", - example: Examples.Images.posters, - }), - banners: Image.array().openapi({ - description: - "Horizontal promotional artwork optimized for header displays and banners", - example: Examples.Images.banners, - }), - heroArts: Image.array().openapi({ - description: - "High-resolution, wide-format artwork designed for featured content and main entries", - example: Examples.Images.heroArts, - }), - backdrops: Image.array().openapi({ - description: - "Full-width backdrop images optimized for page layouts and decorative purposes", - example: Examples.Images.backdrops, - }), - logos: Image.array().openapi({ - description: - "Official game logo artwork, typically with transparent backgrounds for flexible placement", - example: Examples.Images.logos, - }), - icons: Image.array().openapi({ - description: - "Small-format identifiers used for application shortcuts and compact displays", - example: Examples.Images.icons, - }), - }) - .openapi({ - ref: "Images", - description: - "Complete collection of game-related visual assets, including promotional materials, UI elements, and store assets", - example: Examples.Images, - }); - - export type Info = z.infer; - - export const InputInfo = createSelectSchema(imagesTable).omit({ - timeCreated: true, - timeDeleted: true, - timeUpdated: true, - }); - - export const create = fn(InputInfo, (input) => - Database.transaction(async (tx) => - tx - .insert(imagesTable) - .values(input) - .onConflictDoUpdate({ - target: [ - imagesTable.imageHash, - imagesTable.type, - imagesTable.baseGameID, - imagesTable.position, - ], - set: { timeDeleted: null }, - }), - ), - ); - - export function serialize( - input: (typeof imagesTable.$inferSelect)[], - ): z.infer { - return input - .sort((a, b) => { - if (a.type === b.type) { - return a.position - b.position; - } - return a.type.localeCompare(b.type); - }) - .reduce< - Record< - `${(typeof imagesTable.$inferSelect)["type"]}s`, - { - hash: string; - averageColor: ImageColor; - dimensions: ImageDimensions; - fileSize: number; - }[] - > - >( - (acc, img) => { - const key = `${img.type}s` as `${typeof img.type}s`; - if (Array.isArray(acc[key])) { - acc[key]!.push({ - hash: img.imageHash, - averageColor: img.extractedColor, - dimensions: img.dimensions, - fileSize: img.fileSize, - }); - } - return acc; - }, - { - screenshots: [], - boxArts: [], - banners: [], - heroArts: [], - posters: [], - backdrops: [], - icons: [], - logos: [], - }, - ); - } -} diff --git a/cloud/packages/core/src/library/index.ts b/cloud/packages/core/src/library/index.ts deleted file mode 100644 index 2c08ec6b..00000000 --- a/cloud/packages/core/src/library/index.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { Game } from "../game"; -import { Actor } from "../actor"; -import { Database } from "../drizzle"; -import { createEvent } from "../event"; -import { gamesTable } from "../game/game.sql"; -import { createSelectSchema } from "drizzle-zod"; -import { steamLibraryTable } from "./library.sql"; -import { imagesTable } from "../images/images.sql"; -import { and, eq, isNull, sql } from "drizzle-orm"; -import { baseGamesTable } from "../base-game/base-game.sql"; -import { categoriesTable } from "../categories/categories.sql"; - -export namespace Library { - export const Info = createSelectSchema(steamLibraryTable).omit({ - timeCreated: true, - timeDeleted: true, - timeUpdated: true, - }); - - export type Info = z.infer; - - export const Events = { - Add: createEvent( - "library.add", - z.object({ - appID: z.number(), - lastPlayed: z.date().nullable(), - totalPlaytime: z.number(), - }), - ), - }; - - export const add = fn(Info.partial({ ownerSteamID: true }), async (input) => - Database.transaction(async (tx) => { - const ownerSteamID = input.ownerSteamID ?? Actor.steamID(); - const result = await tx - .select() - .from(steamLibraryTable) - .where( - and( - eq(steamLibraryTable.baseGameID, input.baseGameID), - eq(steamLibraryTable.ownerSteamID, ownerSteamID), - isNull(steamLibraryTable.timeDeleted), - ), - ) - .limit(1) - .execute() - .then((rows) => rows.at(0)); - - if (result) return result.baseGameID; - - await tx - .insert(steamLibraryTable) - .values({ - ownerSteamID: ownerSteamID, - baseGameID: input.baseGameID, - lastPlayed: input.lastPlayed, - totalPlaytime: input.totalPlaytime, - }) - .onConflictDoUpdate({ - target: [ - steamLibraryTable.ownerSteamID, - steamLibraryTable.baseGameID, - ], - set: { - timeDeleted: null, - lastPlayed: input.lastPlayed, - totalPlaytime: input.totalPlaytime, - }, - }); - }), - ); - - export const remove = fn(Info, (input) => - Database.transaction(async (tx) => - tx - .update(steamLibraryTable) - .set({ timeDeleted: sql`now()` }) - .where( - and( - eq(steamLibraryTable.ownerSteamID, input.ownerSteamID), - eq(steamLibraryTable.baseGameID, input.baseGameID), - ), - ), - ), - ); - - export const list = () => - Database.transaction(async (tx) => - tx - .select({ - games: baseGamesTable, - categories: categoriesTable, - images: imagesTable, - }) - .from(steamLibraryTable) - .where( - and( - eq(steamLibraryTable.ownerSteamID, Actor.steamID()), - isNull(steamLibraryTable.timeDeleted), - ), - ) - .innerJoin( - baseGamesTable, - eq(baseGamesTable.id, steamLibraryTable.baseGameID), - ) - .leftJoin(gamesTable, eq(gamesTable.baseGameID, baseGamesTable.id)) - .leftJoin( - categoriesTable, - and( - eq(categoriesTable.slug, gamesTable.categorySlug), - eq(categoriesTable.type, gamesTable.categoryType), - ), - ) - // Joining imagesTable 1-N with gamesTable multiplies rows; the subsequent Game.serialize has to uniqueBy to undo this. - // For large libraries with many screenshots the Cartesian effect can significantly bloat the result and network payload. - // One option is to aggregate the images in SQL before joining to keep exactly one row per game: - // .leftJoin( - // sql`(SELECT * FROM images WHERE base_game_id = ${gamesTable.baseGameID} AND time_deleted IS NULL ORDER BY type, position)`.as("images"), - // sql`TRUE` - // ) - .leftJoin( - imagesTable, - and( - eq(imagesTable.baseGameID, gamesTable.baseGameID), - isNull(imagesTable.timeDeleted), - ), - ) - .execute() - .then((rows) => Game.serialize(rows)), - ); -} diff --git a/cloud/packages/core/src/library/library.sql.ts b/cloud/packages/core/src/library/library.sql.ts deleted file mode 100644 index 9740590f..00000000 --- a/cloud/packages/core/src/library/library.sql.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { steamTable } from "../steam/steam.sql"; -import { timestamps, utc, } from "../drizzle/types"; -import { baseGamesTable } from "../base-game/base-game.sql"; -import { index, integer, pgTable, primaryKey, varchar, } from "drizzle-orm/pg-core"; - -export const steamLibraryTable = pgTable( - "game_libraries", - { - ...timestamps, - baseGameID: varchar("base_game_id", { length: 255 }) - .notNull() - .references(() => baseGamesTable.id, { - onDelete: "cascade" - }), - ownerSteamID: varchar("owner_steam_id", { length: 255 }) - .notNull() - .references(() => steamTable.id, { - onDelete: "cascade" - }), - lastPlayed: utc("last_played"), - totalPlaytime: integer("total_playtime").notNull(), - }, - (table) => [ - primaryKey({ - columns: [table.baseGameID, table.ownerSteamID] - }), - index("idx_game_libraries_owner_id").on(table.ownerSteamID), - ], -); \ No newline at end of file diff --git a/cloud/packages/core/src/polar/index.ts b/cloud/packages/core/src/polar/index.ts deleted file mode 100644 index c6a8b11d..00000000 --- a/cloud/packages/core/src/polar/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { z } from "zod"; -import { Resource } from "sst"; -import { fn, memo } from "../utils"; -import { Polar as PolarSdk } from "@polar-sh/sdk"; -import { validateEvent } from "@polar-sh/sdk/webhooks"; - -export namespace Polar { - export const client = memo( - () => - new PolarSdk({ - accessToken: Resource.POLAR_API_KEY.value, - server: Resource.App.stage !== "production" ? "sandbox" : "production", - }), - ); - - export const fromUserEmail = fn(z.string().min(1), async (email) => { - try { - const customers = await client().customers.list({ email }); - - if (customers.result.items.length === 0) { - return await client().customers.create({ email }); - } else { - return customers.result.items[0]; - } - } catch (err) { - //FIXME: This is the issue [Polar.sh/#5147](https://github.com/polarsource/polar/issues/5147) - // console.log("error", err) - return undefined; - } - }); - - // const getProductIDs = (plan: z.infer) => { - // switch (plan) { - // case "free": - // return [Resource.NestriFreeMonthly.value] - // case "pro": - // return [Resource.NestriProYearly.value, Resource.NestriProMonthly.value] - // case "family": - // return [Resource.NestriFamilyYearly.value, Resource.NestriFamilyMonthly.value] - // default: - // return [Resource.NestriFreeMonthly.value] - // } - // } - - export const createPortal = fn(z.string(), async (customerId) => { - const session = await client().customerSessions.create({ - customerId, - }); - - return session.customerPortalUrl; - }); - - //TODO: Implement this - export const handleWebhook = async ( - payload: ReturnType, - ) => { - switch (payload.type) { - case "subscription.created": - const teamID = payload.data.metadata.teamID; - } - }; -} diff --git a/cloud/packages/core/src/realtime/index.ts b/cloud/packages/core/src/realtime/index.ts deleted file mode 100644 index bd22e2bb..00000000 --- a/cloud/packages/core/src/realtime/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - IoTDataPlaneClient, - PublishCommand, -} from "@aws-sdk/client-iot-data-plane"; -import { Actor } from "../actor"; -import { Resource } from "sst"; - -export namespace Realtime { - const client = new IoTDataPlaneClient({}); - - export async function publish(message: any, subTopic?: string) { - const fingerprint = Actor.assert("machine").properties.fingerprint; - let topic = `${Resource.App.name}/${Resource.App.stage}/${fingerprint}/`; - if (subTopic) - topic = `${topic}${subTopic}`; - - await client.send( - new PublishCommand({ - payload: Buffer.from(JSON.stringify(message)), - topic: topic, - }) - ); - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/steam/index.ts b/cloud/packages/core/src/steam/index.ts deleted file mode 100644 index 2edf58e9..00000000 --- a/cloud/packages/core/src/steam/index.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { z } from "zod"; -import { fn } from "../utils"; -import { Resource } from "sst"; -import { Actor } from "../actor"; -import { Common } from "../common"; -import { Database } from "../drizzle"; -import { Examples } from "../examples"; -import { createEvent } from "../event"; -import { eq, and, isNull, desc } from "drizzle-orm"; -import { steamTable, StatusEnum, Limitations } from "./steam.sql"; - -export namespace Steam { - export const Info = z - .object({ - id: z.string().openapi({ - description: Common.IdDescription, - example: Examples.SteamAccount.id, - }), - avatarHash: z.string().openapi({ - description: "The Steam avatar hash that this account owns", - example: Examples.SteamAccount.avatarHash, - }), - status: z.enum(StatusEnum.enumValues).openapi({ - description: "The current connection status of this Steam account", - example: Examples.SteamAccount.status, - }), - userID: z.string().nullable().openapi({ - description: "The user id of which account owns this steam account", - example: Examples.SteamAccount.userID, - }), - profileUrl: z.string().nullable().openapi({ - description: "The steam community url of this account", - example: Examples.SteamAccount.profileUrl, - }), - realName: z.string().nullable().openapi({ - description: "The real name behind of this Steam account", - example: Examples.SteamAccount.realName, - }), - name: z.string().openapi({ - description: "The name used by this account", - example: Examples.SteamAccount.name, - }), - lastSyncedAt: z.date().openapi({ - description: "The last time this account was synced to Steam", - example: Examples.SteamAccount.lastSyncedAt, - }), - limitations: Limitations.openapi({ - description: "The limitations bestowed on this Steam account by Steam", - example: Examples.SteamAccount.limitations, - }), - steamMemberSince: z.date().openapi({ - description: "When this Steam community account was created", - example: Examples.SteamAccount.steamMemberSince, - }), - }) - .openapi({ - ref: "Steam", - description: "Represents a steam user's information stored on Nestri", - example: Examples.SteamAccount, - }); - - export type Info = z.infer; - - export const Events = { - Created: createEvent( - "steam_account.created", - z.object({ - steamID: Info.shape.id, - userID: Info.shape.userID, - }), - ), - Updated: createEvent( - "steam_account.updated", - z.object({ - steamID: Info.shape.id, - userID: Info.shape.userID, - }), - ), - }; - - export const create = fn( - Info.extend({ - useUser: z.boolean(), - }).partial({ - userID: true, - status: true, - useUser: true, - lastSyncedAt: true, - }), - (input) => - Database.transaction(async (tx) => { - const accounts = await tx - .select() - .from(steamTable) - .where( - and(isNull(steamTable.timeDeleted), eq(steamTable.id, input.id)), - ) - .execute() - .then((rows) => rows.map(serialize)); - - // Update instead of create - if (accounts.length > 0) return null; - - const userID = - typeof input.userID === "string" - ? input.userID - : input.useUser - ? Actor.userID() - : null; - await tx.insert(steamTable).values({ - userID, - id: input.id, - name: input.name, - realName: input.realName, - profileUrl: input.profileUrl, - avatarHash: input.avatarHash, - limitations: input.limitations, - status: input.status ?? "offline", - steamMemberSince: input.steamMemberSince, - lastSyncedAt: input.lastSyncedAt ?? Common.utc(), - }); - - // await afterTx(async () => - // bus.publish(Resource.Bus, Events.Created, { userID, steamID: input.id }) - // ); - - return input.id; - }), - ); - - export const updateOwner = fn( - z - .object({ - userID: z.string(), - steamID: z.string(), - }) - .partial({ - userID: true, - }), - async (input) => - Database.transaction(async (tx) => { - const userID = input.userID ?? Actor.userID(); - await tx - .update(steamTable) - .set({ - userID, - }) - .where(eq(steamTable.id, input.steamID)); - - // await afterTx(async () => - // bus.publish(Resource.Bus, Events.Updated, { userID, steamID: input.steamID }) - // ); - - return input.steamID; - }), - ); - - export const fromUserID = fn(z.string().min(1), (userID) => - Database.transaction((tx) => - tx - .select() - .from(steamTable) - .where( - and(eq(steamTable.userID, userID), isNull(steamTable.timeDeleted)), - ) - .orderBy(desc(steamTable.timeCreated)) - .execute() - .then((rows) => rows.map(serialize)), - ), - ); - - export const confirmOwnerShip = fn(z.string().min(1), (userID) => - Database.transaction((tx) => - tx - .select() - .from(steamTable) - .where( - and( - eq(steamTable.userID, userID), - eq(steamTable.id, Actor.steamID()), - isNull(steamTable.timeDeleted), - ), - ) - .orderBy(desc(steamTable.timeCreated)) - .execute() - .then((rows) => rows.map(serialize).at(0)), - ), - ); - - export const fromSteamID = fn(z.string(), (steamID) => - Database.transaction((tx) => - tx - .select() - .from(steamTable) - .where(and(eq(steamTable.id, steamID), isNull(steamTable.timeDeleted))) - .orderBy(desc(steamTable.timeCreated)) - .execute() - .then((rows) => rows.map(serialize).at(0)), - ), - ); - - export const list = () => - Database.transaction((tx) => - tx - .select() - .from(steamTable) - .where( - and( - eq(steamTable.userID, Actor.userID()), - isNull(steamTable.timeDeleted), - ), - ) - .orderBy(desc(steamTable.timeCreated)) - .execute() - .then((rows) => rows.map(serialize)), - ); - - export function serialize( - input: typeof steamTable.$inferSelect, - ): z.infer { - return { - id: input.id, - name: input.name, - status: input.status, - userID: input.userID, - realName: input.realName, - profileUrl: input.profileUrl, - avatarHash: input.avatarHash, - limitations: input.limitations, - lastSyncedAt: input.lastSyncedAt, - steamMemberSince: input.steamMemberSince, - }; - } -} diff --git a/cloud/packages/core/src/steam/steam.sql.ts b/cloud/packages/core/src/steam/steam.sql.ts deleted file mode 100644 index 658797b3..00000000 --- a/cloud/packages/core/src/steam/steam.sql.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { z } from "zod"; -import { userTable } from "../user/user.sql"; -import { id, timestamps, ulid, utc } from "../drizzle/types"; -import { pgTable, varchar, pgEnum, json, unique } from "drizzle-orm/pg-core"; - -export const StatusEnum = pgEnum("steam_status", ["online", "offline", "dnd", "playing"]) - -export const Limitations = z.object({ - isLimited: z.boolean(), - tradeBanState: z.enum(["none", "probation", "banned"]), - isVacBanned: z.boolean(), - visibilityState: z.number(), - privacyState: z.enum(["public", "private", "friendsfriendsonly", "friendsonly"]), -}) - -export type Limitations = z.infer; - -export const steamTable = pgTable( - "steam_accounts", - { - ...timestamps, - id: varchar("id", { length: 255 }) - .primaryKey() - .notNull(), - userID: ulid("user_id") - .references(() => userTable.id, { - onDelete: "cascade", - }), - status: StatusEnum("status").notNull(), - lastSyncedAt: utc("last_synced_at").notNull(), - realName: varchar("real_name", { length: 255 }), - steamMemberSince: utc("member_since").notNull(), - name: varchar("name", { length: 255 }).notNull(), - profileUrl: varchar("profile_url", { length: 255 }), - avatarHash: varchar("avatar_hash", { length: 255 }).notNull(), - limitations: json("limitations").$type().notNull(), - } -); \ No newline at end of file diff --git a/cloud/packages/core/src/user/index.ts b/cloud/packages/core/src/user/index.ts deleted file mode 100644 index 27066be1..00000000 --- a/cloud/packages/core/src/user/index.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { z } from "zod"; -import { Common } from "../common"; -import { Database } from "../drizzle"; -import { createEvent } from "../event"; -import { Polar } from "../polar/index"; -import { createID, fn } from "../utils"; -import { userTable } from "./user.sql"; -import { Examples } from "../examples"; -import { and, eq, isNull, asc } from "drizzle-orm"; -import { ErrorCodes, VisibleError } from "../error"; - -export namespace User { - export const Info = z - .object({ - id: z.string().openapi({ - description: Common.IdDescription, - example: Examples.User.id, - }), - name: z - .string() - .regex(/^[a-zA-Z ]{1,32}$/, "Use a friendly name.") - .openapi({ - description: "The name of this account", - example: Examples.User.name, - }), - polarCustomerID: z.string().nullable().openapi({ - description: "Associated Polar.sh customer identifier", - example: Examples.User.polarCustomerID, - }), - avatarUrl: z.string().url().nullable().openapi({ - description: "The url to the profile picture", - example: Examples.User.avatarUrl, - }), - email: z.string().openapi({ - description: - "Primary email address for user notifications and authentication", - example: Examples.User.email, - }), - lastLogin: z.date().openapi({ - description: "Timestamp of user's most recent authentication", - example: Examples.User.lastLogin, - }), - }) - .openapi({ - ref: "User", - description: - "User account entity with core identification and authentication details", - example: Examples.User, - }); - - export type Info = z.infer; - - export class UserExistsError extends VisibleError { - constructor(username: string) { - super( - "already_exists", - ErrorCodes.Validation.ALREADY_EXISTS, - `A user with this email ${username} already exists`, - ); - } - } - - export const Events = { - Created: createEvent( - "user.created", - z.object({ - userID: Info.shape.id, - }), - ), - }; - - export const create = fn( - Info.omit({ - lastLogin: true, - polarCustomerID: true, - }).partial({ - avatarUrl: true, - id: true, - }), - async (input) => { - const userID = createID("user"); - - const customer = await Polar.fromUserEmail(input.email); - - const id = input.id ?? userID; - - await Database.transaction(async (tx) => { - const result = await tx - .insert(userTable) - .values({ - id, - avatarUrl: input.avatarUrl, - email: input.email, - name: input.name, - polarCustomerID: customer?.id, - lastLogin: Common.utc(), - }) - .onConflictDoNothing({ - target: [userTable.email], - }); - - if (result.rowCount === 0) { - throw new UserExistsError(input.email); - } - }); - - return id; - }, - ); - - export const fromEmail = fn(Info.shape.email.min(1), async (email) => - Database.transaction(async (tx) => - tx - .select() - .from(userTable) - .where(and(eq(userTable.email, email), isNull(userTable.timeDeleted))) - .orderBy(asc(userTable.timeCreated)) - .execute() - .then((rows) => rows.map(serialize).at(0)), - ), - ); - - export const fromID = fn(Info.shape.id.min(1), (id) => - Database.transaction(async (tx) => - tx - .select() - .from(userTable) - .where(and(eq(userTable.id, id), isNull(userTable.timeDeleted))) - .orderBy(asc(userTable.timeCreated)) - .execute() - .then((rows) => rows.map(serialize).at(0)), - ), - ); - - export const remove = fn(Info.shape.id.min(1), (id) => - Database.transaction(async (tx) => { - await tx - .update(userTable) - .set({ - timeDeleted: Common.utc(), - }) - .where(and(eq(userTable.id, id))) - .execute(); - return id; - }), - ); - - export const acknowledgeLogin = fn(Info.shape.id, (id) => - Database.transaction(async (tx) => - tx - .update(userTable) - .set({ - lastLogin: Common.utc(), - }) - .where(and(eq(userTable.id, id))) - .execute(), - ), - ); - - export function serialize( - input: typeof userTable.$inferSelect, - ): z.infer { - return { - id: input.id, - name: input.name, - email: input.email, - avatarUrl: input.avatarUrl, - lastLogin: input.lastLogin, - polarCustomerID: input.polarCustomerID, - }; - } -} diff --git a/cloud/packages/core/src/user/user.sql.ts b/cloud/packages/core/src/user/user.sql.ts deleted file mode 100644 index d45cb10e..00000000 --- a/cloud/packages/core/src/user/user.sql.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { id, timestamps, utc } from "../drizzle/types"; -import { pgTable, text, unique, varchar } from "drizzle-orm/pg-core"; - -export const userTable = pgTable( - "users", - { - ...id, - ...timestamps, - email: varchar("email", { length: 255 }).notNull(), - avatarUrl: text("avatar_url"), - lastLogin: utc("last_login").notNull(), - name: varchar("name", { length: 255 }).notNull(), - polarCustomerID: varchar("polar_customer_id", { length: 255 }), - }, - (user) => [ - unique("idx_user_email").on(user.email), - ] -); \ No newline at end of file diff --git a/cloud/packages/core/src/utils/fn.ts b/cloud/packages/core/src/utils/fn.ts deleted file mode 100644 index 105656b3..00000000 --- a/cloud/packages/core/src/utils/fn.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ZodSchema, z } from "zod"; - -export function fn< - Arg1 extends ZodSchema, - Callback extends (arg1: z.output) => any, ->(arg1: Arg1, cb: Callback) { - const result = function (input: z.input): ReturnType { - const parsed = arg1.parse(input); - return cb.apply(cb, [parsed as any]); - }; - result.schema = arg1; - return result; -} - -export function doubleFn< - Arg1 extends ZodSchema, - Arg2 extends ZodSchema, - Callback extends (arg1: z.output, arg2: z.output) => any, ->(arg1: Arg1, arg2: Arg2, cb: Callback) { - const result = function (input: z.input, input2: z.input): ReturnType { - const parsed = arg1.parse(input); - const parsed2 = arg2.parse(input2); - return cb.apply(cb, [parsed as any, parsed2 as any]); - }; - result.schema = arg1; - return result; -} \ No newline at end of file diff --git a/cloud/packages/core/src/utils/helper.ts b/cloud/packages/core/src/utils/helper.ts deleted file mode 100644 index b50ef505..00000000 --- a/cloud/packages/core/src/utils/helper.ts +++ /dev/null @@ -1,10 +0,0 @@ -export function chunkArray(arr: T[], chunkSize: number): T[][] { - if (chunkSize <= 0) { - throw new Error("chunkSize must be a positive integer"); - } - const chunks: T[][] = []; - for (let i = 0; i < arr.length; i += chunkSize) { - chunks.push(arr.slice(i, i + chunkSize)); - } - return chunks; -} \ No newline at end of file diff --git a/cloud/packages/core/src/utils/id.ts b/cloud/packages/core/src/utils/id.ts deleted file mode 100644 index 64847c41..00000000 --- a/cloud/packages/core/src/utils/id.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ulid } from "ulid"; - -export const prefixes = { - user: "usr", - credentials:"crd", - team: "tem", - product: "prd", - session: "ses", - machine: "mch", - member: "mbr", - variant: "var", - gpu: "gpu", - game: "gme", - usage: "usg", - subscription: "sub", - // task: "tsk", - // invite: "inv", - // product: "prd", -} as const; - -/** - * Generates a unique identifier by concatenating a predefined prefix with a ULID. - * - * Given a key from the predefined prefixes mapping (e.g., "user", "team", "member", "steam"), - * this function retrieves the corresponding prefix and combines it with a ULID using an underscore - * as a separator. The resulting identifier is formatted as "prefix_ulid". - * - * @param prefix - A key from the prefixes mapping. - * @returns A unique identifier string. - */ -export function createID(prefix: keyof typeof prefixes): string { - return [prefixes[prefix], ulid()].join("_"); -} \ No newline at end of file diff --git a/cloud/packages/core/src/utils/index.ts b/cloud/packages/core/src/utils/index.ts deleted file mode 100644 index 22fe08e8..00000000 --- a/cloud/packages/core/src/utils/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./id"; -export * from "./fn"; -export * from "./log"; -export * from "./invite"; -export * from "./helper"; -export * from "./memo"; diff --git a/cloud/packages/core/src/utils/invite.ts b/cloud/packages/core/src/utils/invite.ts deleted file mode 100644 index b781b977..00000000 --- a/cloud/packages/core/src/utils/invite.ts +++ /dev/null @@ -1,32 +0,0 @@ -export namespace Invite { - /** - * Generates a random invite code for teams - * @param length The length of the invite code (default: 8) - * @returns A string containing alphanumeric characters (excluding confusing characters) - */ - export function generateCode(length: number = 8): string { - // Use only unambiguous characters (no 0/O, 1/l/I confusion) - const characters = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; - let result = ''; - - // Create a Uint32Array of the required length for randomness - const randomValues = new Uint32Array(length); - - // Fill with cryptographically strong random values if available - if (typeof crypto !== 'undefined' && crypto.getRandomValues) { - crypto.getRandomValues(randomValues); - } else { - // Fallback for environments without crypto - for (let i = 0; i < length; i++) { - randomValues[i] = Math.floor(Math.random() * 2 ** 32); - } - } - - // Use the random values to select characters - for (let i = 0; i < length; i++) { - result += characters.charAt(randomValues[i] % characters.length); - } - - return result; - } -} \ No newline at end of file diff --git a/cloud/packages/core/src/utils/log.ts b/cloud/packages/core/src/utils/log.ts deleted file mode 100644 index b092d4fb..00000000 --- a/cloud/packages/core/src/utils/log.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Context } from "../context"; - -export namespace Log { - const ctx = Context.create<{ - tags: Record; - }>(); - - export function create(tags?: Record) { - tags = tags || {}; - - const result = { - info(msg: string, extra?: Record) { - const prefix = Object.entries({ - ...use().tags, - ...tags, - ...extra, - }) - .map(([key, value]) => `${key}=${value}`) - .join(" "); - console.log(prefix, msg); - return result; - }, - warn(msg: string, extra?: Record) { - const prefix = Object.entries({ - ...use().tags, - ...tags, - ...extra, - }) - .map(([key, value]) => `${key}=${value}`) - .join(" "); - console.warn(prefix, msg); - return result; - }, - error(error: Error) { - const prefix = Object.entries({ - ...use().tags, - ...tags, - }) - .map(([key, value]) => `${key}=${value}`) - .join(" "); - console.error(prefix, error); - return result; - }, - tag(key: string, value: string) { - // Immutable update: return a fresh logger with updated tags - return Log.create({ ...tags, [key]: value }); - }, - clone() { - return Log.create({ ...tags }); - }, - }; - - return result; - } - - export function provide(tags: Record, cb: () => R) { - const existing = use(); - return ctx.provide( - { - tags: { - ...existing.tags, - ...tags, - }, - }, - cb, - ); - } - - function use() { - try { - return ctx.use(); - } catch (e) { - return { tags: {} }; - } - } -} diff --git a/cloud/packages/core/src/utils/memo.ts b/cloud/packages/core/src/utils/memo.ts deleted file mode 100644 index 6c29e892..00000000 --- a/cloud/packages/core/src/utils/memo.ts +++ /dev/null @@ -1,18 +0,0 @@ -export function memo(fn: () => T, cleanup?: (input: T) => Promise) { - let value: T | undefined; - let loaded = false; - - const result = (): T => { - if (loaded) return value as T; - loaded = true; - value = fn(); - return value as T; - }; - result.reset = async () => { - if (cleanup && value) await cleanup(value); - loaded = false; - value = undefined; - }; - - return result; -} diff --git a/cloud/packages/core/sst-env.d.ts b/cloud/packages/core/sst-env.d.ts deleted file mode 100644 index 9b9de732..00000000 --- a/cloud/packages/core/sst-env.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/* deno-fmt-ignore-file */ - -/// - -import "sst" -export {} \ No newline at end of file diff --git a/cloud/packages/core/tsconfig.json b/cloud/packages/core/tsconfig.json deleted file mode 100644 index e1fd0408..00000000 --- a/cloud/packages/core/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@tsconfig/node20/tsconfig.json", - "compilerOptions": { - "strict": true, - "module": "esnext", - "moduleResolution": "bundler", - } - } \ No newline at end of file diff --git a/cloud/packages/functions/.gitignore b/cloud/packages/functions/.gitignore deleted file mode 100644 index a14702c4..00000000 --- a/cloud/packages/functions/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# dependencies (bun install) -node_modules - -# output -out -dist -*.tgz - -# code coverage -coverage -*.lcov - -# logs -logs -_.log -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# caches -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/cloud/packages/functions/README.md b/cloud/packages/functions/README.md deleted file mode 100644 index 10c5b5e1..00000000 --- a/cloud/packages/functions/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# @nestri/functions - -To install dependencies: - -```bash -bun install -``` - -To run: - -```bash -bun run index.ts -``` - -This project was created using `bun init` in bun v1.2.11. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/cloud/packages/functions/package.json b/cloud/packages/functions/package.json deleted file mode 100644 index 178fb6fb..00000000 --- a/cloud/packages/functions/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@nestri/functions", - "module": "index.ts", - "type": "module", - "private": true, - "devDependencies": { - "@types/bun": "latest", - "@types/steamcommunity": "^3.43.8", - "@cloudflare/workers-types": "4.20250522.0" - }, - "peerDependencies": { - "typescript": "^5" - }, - "exports": { - "./*": "./src/*.ts" - }, - "dependencies": { - "@actor-core/bun": "^0.8.0", - "@actor-core/file-system": "^0.8.0", - "@openauthjs/openauth": "catalog:", - "@aws-sdk/client-lambda": "^3.821.0", - "@aws-sdk/client-s3": "^3.806.0", - "@aws-sdk/client-sqs": "^3.806.0", - "@nestri/core": "workspace:", - "actor-core": "^0.8.0", - "hono": "^4.7.8", - "hono-openapi": "^0.4.8", - "steam-session": "*", - "steamcommunity": "^3.48.6", - "steamid": "^2.1.0" - } -} diff --git a/cloud/packages/functions/src/api/account.ts b/cloud/packages/functions/src/api/account.ts deleted file mode 100644 index a2140644..00000000 --- a/cloud/packages/functions/src/api/account.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Hono } from "hono"; -import { notPublic } from "./utils"; -import { describeRoute } from "hono-openapi"; -import { Examples } from "@nestri/core/examples"; -import { ErrorResponses, Result } from "./utils"; -import { Account } from "@nestri/core/account/index"; - -export namespace AccountApi { - export const route = new Hono() - .use(notPublic) - .get("/", - describeRoute({ - tags: ["Account"], - summary: "Get user account", - description: "Get the current user's account details", - responses: { - 200: { - content: { - "application/json": { - schema: Result( - Account.Info.openapi({ - description: "User account information", - example: { ...Examples.User, profiles: [Examples.SteamAccount] } - }) - ), - }, - }, - description: "User account details" - }, - 400: ErrorResponses[400], - 404: ErrorResponses[404], - 429: ErrorResponses[429], - } - }), - async (c) => - c.json({ - data: await Account.list() - }, 200) - ) -} \ No newline at end of file diff --git a/cloud/packages/functions/src/api/friend.ts b/cloud/packages/functions/src/api/friend.ts deleted file mode 100644 index 0ee6a748..00000000 --- a/cloud/packages/functions/src/api/friend.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { z } from "zod" -import { Hono } from "hono"; -import { validator } from "hono-openapi/zod"; -import { describeRoute } from "hono-openapi"; -import { Examples } from "@nestri/core/examples"; -import { Friend } from "@nestri/core/friend/index"; -import { ErrorResponses, notPublic, Result } from "./utils"; -import { ErrorCodes, VisibleError } from "@nestri/core/error"; - -export namespace FriendApi { - export const route = new Hono() - .use(notPublic) - .get("/", - describeRoute({ - tags: ["Friend"], - summary: "List friends accounts", - description: "List all this user's friends accounts", - responses: { - 200: { - content: { - "application/json": { - schema: Result( - Friend.Info.array().openapi({ - description: "All friends accounts", - example: [Examples.Friend] - }) - ), - }, - }, - description: "Friends accounts details" - }, - 400: ErrorResponses[400], - 404: ErrorResponses[404], - 429: ErrorResponses[429], - } - }), - async (c) => - c.json({ - data: await Friend.list() - }) - ) - .get("/:id", - describeRoute({ - tags: ["Friend"], - summary: "Get a friend", - description: "Get a friend's details by their SteamID", - responses: { - 200: { - content: { - "application/json": { - schema: Result( - Friend.Info.openapi({ - description: "Friend's accounts", - example: Examples.Friend - }) - ), - }, - }, - description: "Friends accounts details" - }, - 400: ErrorResponses[400], - 404: ErrorResponses[404], - 429: ErrorResponses[429], - } - }), - validator( - "param", - z.object({ - id: z.string().openapi({ - description: "ID of the friend to get", - example: Examples.Friend.id, - }), - }), - ), - async (c) => { - const friendSteamID = c.req.valid("param").id - - const friend = await Friend.fromFriendID(friendSteamID) - - if (!friend) { - throw new VisibleError( - "not_found", - ErrorCodes.NotFound.RESOURCE_NOT_FOUND, - `Friend ${friendSteamID} not found` - ) - } - - return c.json({ - data: friend - }) - } - ) -} \ No newline at end of file diff --git a/cloud/packages/functions/src/api/game.ts b/cloud/packages/functions/src/api/game.ts deleted file mode 100644 index 9dde6ddc..00000000 --- a/cloud/packages/functions/src/api/game.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { z } from "zod" -import { Hono } from "hono"; -import { describeRoute } from "hono-openapi"; -import { Game } from "@nestri/core/game/index"; -import { Examples } from "@nestri/core/examples"; -import { Library } from "@nestri/core/library/index"; -import { ErrorCodes, VisibleError } from "@nestri/core/error"; -import { ErrorResponses, notPublic, Result, validator } from "./utils"; - -export namespace GameApi { - export const route = new Hono() - .use(notPublic) - .get("/", - describeRoute({ - tags: ["Game"], - summary: "List games", - description: "List all the games on this user's library", - responses: { - 200: { - content: { - "application/json": { - schema: Result( - Game.Info.array().openapi({ - description: "All games in the library", - example: [Examples.Game] - }) - ), - }, - }, - description: "All games in the library" - }, - 400: ErrorResponses[400], - 404: ErrorResponses[404], - 429: ErrorResponses[429], - } - }), - async (c) => - c.json({ - data: await Library.list() - }) - ) - .get("/:id", - describeRoute({ - tags: ["Game"], - summary: "Get game", - description: "Get a game by its id, it does not have to be in user's library", - responses: { - 200: { - content: { - "application/json": { - schema: Result( - Game.Info.openapi({ - description: "Game details", - example: Examples.Game - }) - ), - }, - }, - description: "Game details" - }, - 400: ErrorResponses[400], - 429: ErrorResponses[429], - } - }), - validator( - "param", - z.object({ - id: z.string().openapi({ - description: "ID of the game to get", - example: Examples.Game.id, - }), - }), - ), - async (c) => { - const gameID = c.req.valid("param").id - - const game = await Game.fromID(gameID) - - if (!game) { - throw new VisibleError( - "not_found", - ErrorCodes.NotFound.RESOURCE_NOT_FOUND, - `Game ${gameID} does not exist` - ) - } - - return c.json({ - data: game - }) - } - ) -} \ No newline at end of file diff --git a/cloud/packages/functions/src/api/index.ts b/cloud/packages/functions/src/api/index.ts deleted file mode 100644 index e5270f93..00000000 --- a/cloud/packages/functions/src/api/index.ts +++ /dev/null @@ -1,97 +0,0 @@ -import "zod-openapi/extend"; -import { Hono } from "hono"; -import { GameApi } from "./game"; -import { SteamApi } from "./steam"; -import { auth } from "./utils/auth"; -import { FriendApi } from "./friend"; -import { logger } from "hono/logger"; -import { AccountApi } from "./account"; -import { openAPISpecs } from "hono-openapi"; -import { patchLogger } from "../utils/patch-logger"; -import { HTTPException } from "hono/http-exception"; -import type { Service } from "@cloudflare/workers-types"; -import { ErrorCodes, VisibleError } from "@nestri/core/error"; - -patchLogger(); - -export const app = new Hono(); -app - .use(logger()) - .use(async (c, next) => { - c.header("Cache-Control", "no-store"); - return next(); - }) - .use(auth); - -const routes = app - .get("/", (c) => c.text("Hello World!")) - .route("/games", GameApi.route) - .route("/steam", SteamApi.route) - .route("/friends", FriendApi.route) - .route("/account", AccountApi.route) - .onError((error, c) => { - if (error instanceof VisibleError) { - console.error("api error:", error); - // @ts-expect-error - return c.json(error.toResponse(), error.statusCode()); - } - // Handle HTTP exceptions - if (error instanceof HTTPException) { - console.error("http error:", error); - return c.json( - { - type: "validation", - code: ErrorCodes.Validation.INVALID_PARAMETER, - message: "Invalid request", - }, - error.status, - ); - } - console.error("unhandled error:", error); - return c.json( - { - type: "internal", - code: ErrorCodes.Server.INTERNAL_ERROR, - message: "Internal server error", - }, - 500, - ); - }); - -app.get( - "/doc", - openAPISpecs(routes, { - documentation: { - info: { - title: "Nestri API", - description: - "The Nestri API gives you the power to run your own customized cloud gaming platform.", - version: "0.0.1", - }, - components: { - securitySchemes: { - Bearer: { - type: "http", - scheme: "bearer", - bearerFormat: "JWT", - }, - SteamID: { - type: "apiKey", - description: "The steam ID to use for this query", - in: "header", - name: "x-nestri-steam", - }, - }, - }, - security: [{ Bearer: [], TeamID: [] }], - servers: [ - { description: "Production", url: "https://api.nestri.io" }, - { description: "Sandbox", url: "https://api.dev.nestri.io" }, - ], - }, - }), -); - -export type Routes = typeof routes; - -export default app; diff --git a/cloud/packages/functions/src/api/realtime/actor-core.ts b/cloud/packages/functions/src/api/realtime/actor-core.ts deleted file mode 100644 index 59f9e8a9..00000000 --- a/cloud/packages/functions/src/api/realtime/actor-core.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { actor } from "actor-core"; - -// Define a chat room actor -const chatRoom = actor({ - // Initialize state when the actor is first created - createState: () => ({ - messages: [] as any[], - }), - - // Define actions clients can call - actions: { - // Action to send a message - sendMessage: (c, sender, text) => { - // Update state - c.state.messages.push({ sender, text }); - - // Broadcast to all connected clients - c.broadcast("newMessage", { sender, text }); - }, - - // Action to get chat history - getHistory: (c) => { - return c.state.messages; - } - } -}); - -export default chatRoom; \ No newline at end of file diff --git a/cloud/packages/functions/src/api/realtime/index.ts b/cloud/packages/functions/src/api/realtime/index.ts deleted file mode 100644 index e333af6d..00000000 --- a/cloud/packages/functions/src/api/realtime/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { setup } from "actor-core"; -import chatRoom from "./actor-core"; -import { createRouter } from "@actor-core/bun"; -import { - FileSystemGlobalState, - FileSystemActorDriver, - FileSystemManagerDriver, -} from "@actor-core/file-system"; - -export namespace Realtime { - const app = setup({ - actors: { chatRoom }, - basePath: "/realtime" - }); - - const fsState = new FileSystemGlobalState("/tmp"); - - const realtimeRouter = createRouter(app, { - topology: "standalone", - drivers: { - manager: new FileSystemManagerDriver(app, fsState), - actor: new FileSystemActorDriver(fsState), - } - }); - - export const route = realtimeRouter.router; - export const webSocketHandler = realtimeRouter.webSocketHandler; -} \ No newline at end of file diff --git a/cloud/packages/functions/src/api/steam.ts b/cloud/packages/functions/src/api/steam.ts deleted file mode 100644 index a88fe2c6..00000000 --- a/cloud/packages/functions/src/api/steam.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { z } from "zod"; -import { Hono } from "hono"; -import { Resource } from "sst"; -import { describeRoute } from "hono-openapi"; -import { User } from "@nestri/core/user/index"; -import { Examples } from "@nestri/core/examples"; -import { Steam } from "@nestri/core/steam/index"; -import { getCookie, setCookie } from "hono/cookie"; -import { Client } from "@nestri/core/client/index"; -import { ErrorCodes, VisibleError } from "@nestri/core/error"; -import { ErrorResponses, validator, Result, notPublic } from "./utils"; - -export namespace SteamApi { - export const route = new Hono() - .get("/", - describeRoute({ - tags: ["Steam"], - summary: "List Steam accounts", - description: "List all Steam accounts belonging to this user", - responses: { - 200: { - content: { - "application/json": { - schema: Result( - Steam.Info.array().openapi({ - description: "All linked Steam accounts", - example: [Examples.SteamAccount] - }) - ), - }, - }, - description: "Linked Steam accounts details" - }, - 400: ErrorResponses[400], - 429: ErrorResponses[429], - } - }), - notPublic, - async (c) => - c.json({ - data: await Steam.list() - }) - ) - .get("/callback/:id", - validator( - "param", - z.object({ - id: z.string().openapi({ - description: "ID of the user to login", - example: Examples.User.id, - }), - }), - ), - async (c) => { - const cookieID = getCookie(c, "user_id"); - - const userID = c.req.valid("param").id; - - if (!cookieID || cookieID !== userID) { - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - "You should not be here" - ); - } - - const currentUser = await User.fromID(userID); - if (!currentUser) { - throw new VisibleError( - "not_found", - ErrorCodes.NotFound.RESOURCE_NOT_FOUND, - `User ${userID} not found` - ) - } - - const params = new URL(c.req.url).searchParams; - - // Verify OpenID response and get steamID - const steamID = await Client.verifyOpenIDResponse(params); - - // If verification failed, return error - if (!steamID) { - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - "Invalid OpenID authentication response" - ); - } - - const user = (await Client.getUserInfo([steamID]))[0]; - - if (!user) { - throw new VisibleError( - "internal", - ErrorCodes.NotFound.RESOURCE_NOT_FOUND, - "Steam user data is missing" - ); - } - - const wasAdded = await Steam.create({ ...user, userID }); - - if (!wasAdded) { - // Update the owner of the Steam account - await Steam.updateOwner({ userID, steamID }) - } - - return c.html( - ` - - ` - ) - } - ) - .get("/popup/:id", - describeRoute({ - tags: ["Steam"], - summary: "Login to Steam", - description: "Login to Steam in a popup", - responses: { - 400: ErrorResponses[400], - 429: ErrorResponses[429], - } - }), - validator( - "param", - z.object({ - id: z.string().openapi({ - description: "ID of the user to login", - example: Examples.User.id, - }), - }), - ), - async (c) => { - const userID = c.req.valid("param").id; - - const user = await User.fromID(userID); - if (!user) { - throw new VisibleError( - "not_found", - ErrorCodes.NotFound.RESOURCE_NOT_FOUND, - `User ${userID} not found` - ) - } - - setCookie(c, "user_id", user.id); - - const returnUrl = `${new URL(Resource.Urls.api).origin}/steam/callback/${userID}` - - const params = new URLSearchParams({ - 'openid.ns': 'http://specs.openid.net/auth/2.0', - 'openid.mode': 'checkid_setup', - 'openid.return_to': returnUrl, - 'openid.realm': new URL(returnUrl).origin, - 'openid.identity': 'http://specs.openid.net/auth/2.0/identifier_select', - 'openid.claimed_id': 'http://specs.openid.net/auth/2.0/identifier_select', - 'user_id': user.id - }); - - return c.redirect(`https://steamcommunity.com/openid/login?${params.toString()}`, 302) - } - ) -} \ No newline at end of file diff --git a/cloud/packages/functions/src/api/utils/auth.ts b/cloud/packages/functions/src/api/utils/auth.ts deleted file mode 100644 index ef8f4aa1..00000000 --- a/cloud/packages/functions/src/api/utils/auth.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Resource } from "sst"; -import { subjects } from "../../subjects"; -import { Actor } from "@nestri/core/actor"; -import { type MiddlewareHandler } from "hono"; -import { memo } from "@nestri/core/utils/memo"; -import { Steam } from "@nestri/core/steam/index"; -import { createClient } from "@openauthjs/openauth/client"; -import { ErrorCodes, VisibleError } from "@nestri/core/error"; - -const client = memo(() => - createClient({ - clientID: "api", - fetch: (input, init) => Resource.Auth.fetch(input, init), - issuer: Resource.Urls.auth, - }), -); - -export const notPublic: MiddlewareHandler = async (c, next) => { - const actor = Actor.use(); - if (actor.type === "public") - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - "Missing authorization header", - ); - return next(); -}; - -export const auth: MiddlewareHandler = async (c, next) => { - const authHeader = c.req.header("authorization"); - if (!authHeader) return Actor.provide("public", {}, next); - const match = authHeader.match(/^Bearer (.+)$/); - if (!match) { - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.INVALID_TOKEN, - "Invalid personal access token", - ); - } - const bearerToken = match[1]; - //@ts-expect-error - let result = await client().verify(subjects, bearerToken!); - if (result.err) { - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.INVALID_TOKEN, - "Invalid bearer token", - ); - } - - if (result.subject.type === "user") { - const steamID = c.req.header("x-nestri-steam"); - if (!steamID) { - return Actor.provide( - result.subject.type, - // @ts-expect-error - result.subject.properties, - next, - ); - } - const userID = result.subject.properties.userID; - return Actor.provide( - "steam", - { - steamID, - }, - async () => { - const steamAcc = await Steam.confirmOwnerShip(userID); - if (!steamAcc) { - throw new VisibleError( - "authentication", - ErrorCodes.Authentication.UNAUTHORIZED, - `You don't have permission to access this resource.`, - ); - } - return Actor.provide( - "member", - { - steamID, - userID, - }, - next, - ); - }, - ); - } - - return Actor.provide("public", {}, next); -}; diff --git a/cloud/packages/functions/src/api/utils/error.ts b/cloud/packages/functions/src/api/utils/error.ts deleted file mode 100644 index e255808f..00000000 --- a/cloud/packages/functions/src/api/utils/error.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { resolver } from "hono-openapi/zod"; -import { ErrorResponse } from "@nestri/core/error"; - -export const ErrorResponses = { - 400: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Validation error", - example: { - type: "validation", - code: "invalid_parameter", - message: "The request was invalid", - param: "email", - }, - }), - ), - }, - }, - description: - "Bad Request - The request could not be understood or was missing required parameters.", - }, - 401: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Authentication error", - example: { - type: "authentication", - code: "unauthorized", - message: "Authentication required", - }, - }), - ), - }, - }, - description: - "Unauthorized - Authentication is required and has failed or has not been provided.", - }, - 403: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Permission error", - example: { - type: "forbidden", - code: "permission_denied", - message: "You do not have permission to access this resource", - }, - }), - ), - }, - }, - description: - "Forbidden - You do not have permission to access this resource.", - }, - 404: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Not found error", - example: { - type: "not_found", - code: "resource_not_found", - message: "The requested resource could not be found", - }, - }), - ), - }, - }, - description: "Not Found - The requested resource does not exist.", - }, - 409: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Conflict Error", - example: { - type: "already_exists", - code: "resource_already_exists", - message: "The resource could not be created because it already exists", - }, - }), - ), - }, - }, - description: "Conflict - The resource could not be created because it already exists.", - }, - 429: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Rate limit error", - example: { - type: "rate_limit", - code: "too_many_requests", - message: "Rate limit exceeded", - }, - }), - ), - }, - }, - description: - "Too Many Requests - You have made too many requests in a short period of time.", - }, - 500: { - content: { - "application/json": { - schema: resolver( - ErrorResponse.openapi({ - description: "Server error", - example: { - type: "internal", - code: "internal_error", - message: "Internal server error", - }, - }), - ), - }, - }, - description: "Internal Server Error - Something went wrong on our end.", - }, - }; \ No newline at end of file diff --git a/cloud/packages/functions/src/api/utils/hook.ts b/cloud/packages/functions/src/api/utils/hook.ts deleted file mode 100644 index 7a58fbc1..00000000 --- a/cloud/packages/functions/src/api/utils/hook.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ZodError, ZodSchema, z } from 'zod'; -import type { Env, ValidationTargets, Context, TypedResponse, Input, MiddlewareHandler } from 'hono'; - -type Hook = (result: ({ - success: true; - data: T; -} | { - success: false; - error: ZodError; - data: T; -}) & { - target: Target; -}, c: Context) => Response | void | TypedResponse | Promise>; -type HasUndefined = undefined extends T ? true : false; -declare const zValidator: , Target extends keyof ValidationTargets, E extends Env, P extends string, In = z.input, Out = z.output, I extends Input = { - in: HasUndefined extends true ? { [K in Target]?: (In extends ValidationTargets[K] ? In : { [K2 in keyof In]?: ValidationTargets[K][K2] | undefined; }) | undefined; } : { [K_1 in Target]: In extends ValidationTargets[K_1] ? In : { [K2_1 in keyof In]: ValidationTargets[K_1][K2_1]; }; }; - out: { [K_2 in Target]: Out; }; -}, V extends I = I>(target: Target, schema: T, hook?: Hook, E, P, Target, {}> | undefined) => MiddlewareHandler; - -export { type Hook, zValidator }; \ No newline at end of file diff --git a/cloud/packages/functions/src/api/utils/index.ts b/cloud/packages/functions/src/api/utils/index.ts deleted file mode 100644 index c8d1cd70..00000000 --- a/cloud/packages/functions/src/api/utils/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./auth"; -export * from "./error"; -export * from "./result"; -export * from "./validator"; \ No newline at end of file diff --git a/cloud/packages/functions/src/api/utils/result.ts b/cloud/packages/functions/src/api/utils/result.ts deleted file mode 100644 index 248e9aa9..00000000 --- a/cloud/packages/functions/src/api/utils/result.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { z } from "zod"; -import { resolver } from "hono-openapi/zod"; - -export function Result(schema: T) { - return resolver(z.object({ data: schema })); -} diff --git a/cloud/packages/functions/src/api/utils/validator.ts b/cloud/packages/functions/src/api/utils/validator.ts deleted file mode 100644 index f5da2f6e..00000000 --- a/cloud/packages/functions/src/api/utils/validator.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Hook } from "./hook"; -import { z, ZodSchema } from "zod"; -import { ErrorCodes } from "@nestri/core/error"; -import { validator as zodValidator } from "hono-openapi/zod"; -import type { MiddlewareHandler, ValidationTargets } from "hono"; - -type ZodIssueExtended = z.ZodIssue & { - expected?: unknown; - received?: unknown; -} - -/** - * Custom validator wrapper around hono-openapi/zod validator that formats errors - */ -export const validator = < - T extends ZodSchema, - Target extends keyof ValidationTargets ->( - target: Target, - schema: T -): MiddlewareHandler< - Record, - string, - { - in: { - [K in Target]: z.input; - }; - out: { - [K in Target]: z.output; - }; - } -> => { - const standardErrorHandler: Hook, any, any, Target> = ( - result, - c, - ) => { - if (!result.success) { - const issues = result.error.issues || result.error.errors || []; - const firstIssue = issues[0]; - const fieldPath = Array.isArray(firstIssue?.path) - ? firstIssue.path.join(".") - : firstIssue?.path; - - let errorCode = ErrorCodes.Validation.INVALID_PARAMETER; - if (firstIssue?.code === "invalid_type" && firstIssue?.received === "undefined") { - errorCode = ErrorCodes.Validation.MISSING_REQUIRED_FIELD; - } else if ( - ["invalid_string", "invalid_date", "invalid_regex"].includes(firstIssue?.code as string) - ) { - errorCode = ErrorCodes.Validation.INVALID_FORMAT; - } - - const response = { - type: "validation", - code: errorCode, - message: firstIssue?.message, - param: fieldPath, - details: issues.length > 1 - ? { - issues: issues.map((issue: ZodIssueExtended) => ({ - path: Array.isArray(issue.path) ? issue.path.join(".") : issue.path, - code: issue.code, - message: issue.message, - expected: issue.expected, - received: issue.received, - })), - } - : undefined, - }; - - console.log("Validation error in validator:", response); - return c.json(response, 400); - } - }; - - return zodValidator(target, schema, standardErrorHandler); -}; diff --git a/cloud/packages/functions/src/auth/adapters/discord.ts b/cloud/packages/functions/src/auth/adapters/discord.ts deleted file mode 100644 index cadc3369..00000000 --- a/cloud/packages/functions/src/auth/adapters/discord.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Oauth2Adapter, type Oauth2WrappedConfig } from "../ui/oauth2" - -export function DiscordAdapter(config: Oauth2WrappedConfig) { - return Oauth2Adapter({ - type: "discord", - ...config, - endpoint: { - authorization: "https://discord.com/oauth2/authorize", - token: "https://discord.com/api/oauth2/token", - }, - }) -} diff --git a/cloud/packages/functions/src/auth/adapters/github.ts b/cloud/packages/functions/src/auth/adapters/github.ts deleted file mode 100644 index b5d70d54..00000000 --- a/cloud/packages/functions/src/auth/adapters/github.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Oauth2Adapter, type Oauth2WrappedConfig } from "../ui/oauth2" - -export function GithubAdapter(config: Oauth2WrappedConfig) { - return Oauth2Adapter({ - ...config, - type: "github", - endpoint: { - authorization: "https://github.com/login/oauth/authorize", - token: "https://github.com/login/oauth/access_token", - }, - }) -} diff --git a/cloud/packages/functions/src/auth/adapters/index.ts b/cloud/packages/functions/src/auth/adapters/index.ts deleted file mode 100644 index 3e5e1c54..00000000 --- a/cloud/packages/functions/src/auth/adapters/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./discord" -export * from "./github" -export * from "./password" \ No newline at end of file diff --git a/cloud/packages/functions/src/auth/adapters/password.ts b/cloud/packages/functions/src/auth/adapters/password.ts deleted file mode 100644 index 623d181f..00000000 --- a/cloud/packages/functions/src/auth/adapters/password.ts +++ /dev/null @@ -1,441 +0,0 @@ -// import { UnknownStateError } from "@openauthjs/openauth/error" -import { Storage } from "@openauthjs/openauth/storage/storage" -import { type Provider } from "@openauthjs/openauth/provider/provider" -import { generateUnbiasedDigits, timingSafeCompare } from "@openauthjs/openauth/random" - -export interface PasswordHasher { - hash(password: string): Promise - verify(password: string, compare: T): Promise -} - -export interface PasswordConfig { - length?: number - hasher?: PasswordHasher - login: ( - req: Request, - form?: FormData, - error?: PasswordLoginError, - ) => Promise - register: ( - req: Request, - state: PasswordRegisterState, - form?: FormData, - error?: PasswordRegisterError, - ) => Promise - change: ( - req: Request, - state: PasswordChangeState, - form?: FormData, - error?: PasswordChangeError, - ) => Promise - sendCode: (email: string, code: string) => Promise -} - -export type PasswordRegisterState = - | { - type: "start" - } - | { - type: "code" - code: string - email: string - password: string - username: string - } - -export type PasswordRegisterError = - | { - type: "invalid_code" - } - | { - type: "email_taken" - } - | { - type: "invalid_email" - } - | { - type: "invalid_password" - } - | { - type: "invalid_username" - }| { - type: "username_taken" - } - -export type PasswordChangeState = - | { - type: "start" - redirect: string - } - | { - type: "code" - code: string - email: string - redirect: string - } - | { - type: "update" - redirect: string - email: string - } - -export type PasswordChangeError = - | { - type: "invalid_email" - } - | { - type: "invalid_code" - } - | { - type: "invalid_password" - } - | { - type: "password_mismatch" - } - -export type PasswordLoginError = - | { - type: "invalid_password" - } - | { - type: "invalid_email" - } - -export function PasswordAdapter(config: PasswordConfig) { - const hasher = config.hasher ?? ScryptHasher() - function generate() { - return generateUnbiasedDigits(6) - } - return { - type: "password", - init(routes, ctx) { - routes.get("/authorize", async (c) => - ctx.forward(c, await config.login(c.req.raw)), - ) - - routes.post("/authorize", async (c) => { - const fd = await c.req.formData() - async function error(err: PasswordLoginError) { - return ctx.forward(c, await config.login(c.req.raw, fd, err)) - } - const email = fd.get("email")?.toString()?.toLowerCase() - if (!email) return error({ type: "invalid_email" }) - const hash = await Storage.get(ctx.storage, [ - "email", - email, - "password", - ]) - const password = fd.get("password")?.toString() - if (!password || !hash || !(await hasher.verify(password, hash))) - return error({ type: "invalid_password" }) - return ctx.success( - c, - { - email: email, - }, - { - invalidate: async (subject) => { - await Storage.set( - ctx.storage, - ["email", email, "subject"], - subject, - ) - }, - }, - ) - }) - - routes.get("/register", async (c) => { - const state: PasswordRegisterState = { - type: "start", - } - await ctx.set(c, "adapter", 60 * 60 * 24, state) - return ctx.forward(c, await config.register(c.req.raw, state)) - }) - - routes.post("/register", async (c) => { - const fd = await c.req.formData() - const email = fd.get("email")?.toString()?.toLowerCase() - const action = fd.get("action")?.toString() - const adapter = await ctx.get(c, "adapter") - - async function transition( - next: PasswordRegisterState, - err?: PasswordRegisterError, - ) { - await ctx.set(c, "adapter", 60 * 60 * 24, next) - return ctx.forward(c, await config.register(c.req.raw, next, fd, err)) - } - - if (action === "register" && adapter.type === "start") { - const password = fd.get("password")?.toString() - const username = fd.get("username")?.toString() - const usernameRegex = /^[a-zA-Z]{1,32}$/; - if (!email) return transition(adapter, { type: "invalid_email" }) - if (!username) return transition(adapter, { type: "invalid_username" }) - if (!password) - return transition(adapter, { type: "invalid_password" }) - if (!usernameRegex.test(username)) - return transition(adapter, { type: "invalid_username" }) - const existing = await Storage.get(ctx.storage, [ - "email", - email, - "password", - ]) - if (existing) return transition(adapter, { type: "email_taken" }) - // const existingUsername = await Profiles.fromUsername(username) - // if (existingUsername) return transition(adapter, { type: "username_taken" }) - const code = generate() - await config.sendCode(email, code) - return transition({ - type: "code", - code, - password: await hasher.hash(password), - email, - username - }) - } - - if (action === "verify" && adapter.type === "code") { - const code = fd.get("code")?.toString() - if (!code || !timingSafeCompare(code, adapter.code)) - return transition(adapter, { type: "invalid_code" }) - const existing = await Storage.get(ctx.storage, [ - "email", - adapter.email, - "password", - ]) - if (existing) - return transition({ type: "start" }, { type: "email_taken" }) - await Storage.set( - ctx.storage, - ["email", adapter.email, "password"], - adapter.password, - ) - return ctx.success(c, { - email: adapter.email, - username: adapter.username - }) - } - - return transition({ type: "start" }) - }) - - routes.get("/change", async (c) => { - let redirect = - c.req.query("redirect_uri") || getRelativeUrl(c, "./authorize") - const state: PasswordChangeState = { - type: "start", - redirect, - } - await ctx.set(c, "adapter", 60 * 60 * 24, state) - return ctx.forward(c, await config.change(c.req.raw, state)) - }) - - routes.post("/change", async (c) => { - const fd = await c.req.formData() - const action = fd.get("action")?.toString() - const adapter = await ctx.get(c, "adapter") - if (!adapter) throw new UnknownStateError() - - async function transition( - next: PasswordChangeState, - err?: PasswordChangeError, - ) { - await ctx.set(c, "adapter", 60 * 60 * 24, next) - return ctx.forward(c, await config.change(c.req.raw, next, fd, err)) - } - - if (action === "code") { - const email = fd.get("email")?.toString()?.toLowerCase() - if (!email) - return transition( - { type: "start", redirect: adapter.redirect }, - { type: "invalid_email" }, - ) - const code = generate() - await config.sendCode(email, code) - - return transition({ - type: "code", - code, - email, - redirect: adapter.redirect, - }) - } - - if (action === "verify" && adapter.type === "code") { - const code = fd.get("code")?.toString() - if (!code || !timingSafeCompare(code, adapter.code)) - return transition(adapter, { type: "invalid_code" }) - return transition({ - type: "update", - email: adapter.email, - redirect: adapter.redirect, - }) - } - - if (action === "update" && adapter.type === "update") { - const existing = await Storage.get(ctx.storage, [ - "email", - adapter.email, - "password", - ]) - if (!existing) return c.redirect(adapter.redirect, 302) - - const password = fd.get("password")?.toString() - const repeat = fd.get("repeat")?.toString() - if (!password) - return transition(adapter, { type: "invalid_password" }) - if (password !== repeat) - return transition(adapter, { type: "password_mismatch" }) - - await Storage.set( - ctx.storage, - ["email", adapter.email, "password"], - await hasher.hash(password), - ) - const subject = await Storage.get(ctx.storage, [ - "email", - adapter.email, - "subject", - ]) - if (subject) await ctx.invalidate(subject) - - return c.redirect(adapter.redirect, 302) - } - - return transition({ type: "start", redirect: adapter.redirect }) - }) - }, - } satisfies Provider<{ email: string; username?:string }> -} - -import * as jose from "jose" -import { TextEncoder } from "node:util" - -interface HashedPassword {} - -export function PBKDF2Hasher(opts?: { interations?: number }): PasswordHasher<{ - hash: string - salt: string - iterations: number -}> { - const iterations = opts?.interations ?? 600000 - return { - async hash(password) { - const encoder = new TextEncoder() - const bytes = encoder.encode(password) - const salt = crypto.getRandomValues(new Uint8Array(16)) - const keyMaterial = await crypto.subtle.importKey( - "raw", - bytes, - "PBKDF2", - false, - ["deriveBits"], - ) - const hash = await crypto.subtle.deriveBits( - { - name: "PBKDF2", - hash: "SHA-256", - salt: salt, - iterations, - }, - keyMaterial, - 256, - ) - const hashBase64 = jose.base64url.encode(new Uint8Array(hash)) - const saltBase64 = jose.base64url.encode(salt) - return { - hash: hashBase64, - salt: saltBase64, - iterations, - } - }, - async verify(password, compare) { - const encoder = new TextEncoder() - const passwordBytes = encoder.encode(password) - const salt = jose.base64url.decode(compare.salt) - const params = { - name: "PBKDF2", - hash: "SHA-256", - salt, - iterations: compare.iterations, - } - const keyMaterial = await crypto.subtle.importKey( - "raw", - passwordBytes, - "PBKDF2", - false, - ["deriveBits"], - ) - const hash = await crypto.subtle.deriveBits(params, keyMaterial, 256) - const hashBase64 = jose.base64url.encode(new Uint8Array(hash)) - return hashBase64 === compare.hash - }, - } -} -import { timingSafeEqual, randomBytes, scrypt } from "node:crypto" -import { getRelativeUrl } from "@openauthjs/openauth/util" -import { UnknownStateError } from "@openauthjs/openauth/error" - -export function ScryptHasher(opts?: { - N?: number - r?: number - p?: number -}): PasswordHasher<{ - hash: string - salt: string - N: number - r: number - p: number -}> { - const N = opts?.N ?? 16384 - const r = opts?.r ?? 8 - const p = opts?.p ?? 1 - - return { - async hash(password) { - const salt = randomBytes(16) - const keyLength = 32 // 256 bits - - const derivedKey = await new Promise((resolve, reject) => { - scrypt(password, salt, keyLength, { N, r, p }, (err, derivedKey) => { - if (err) reject(err) - else resolve(derivedKey) - }) - }) - - const hashBase64 = derivedKey.toString("base64") - const saltBase64 = salt.toString("base64") - - return { - hash: hashBase64, - salt: saltBase64, - N, - r, - p, - } - }, - - async verify(password, compare) { - const salt = Buffer.from(compare.salt, "base64") - const keyLength = 32 // 256 bits - - const derivedKey = await new Promise((resolve, reject) => { - scrypt( - password, - salt, - keyLength, - { N: compare.N, r: compare.r, p: compare.p }, - (err, derivedKey) => { - if (err) reject(err) - else resolve(derivedKey) - }, - ) - }) - - return timingSafeEqual(derivedKey, Buffer.from(compare.hash, "base64")) - }, - } -} diff --git a/cloud/packages/functions/src/auth/index.ts b/cloud/packages/functions/src/auth/index.ts deleted file mode 100644 index d3754250..00000000 --- a/cloud/packages/functions/src/auth/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { Select } from "./ui"; -import { Resource } from "sst"; -import { logger } from "hono/logger"; -import { subjects } from "../subjects"; -import { handleDiscord } from "./utils"; -import { DiscordAdapter } from "./adapters"; -import { issuer } from "@openauthjs/openauth"; -import { User } from "@nestri/core/user/index"; -import { patchLogger } from "../utils/patch-logger"; -import type { KVNamespace } from "@cloudflare/workers-types"; -import { CloudflareStorage } from "@openauthjs/openauth/storage/cloudflare"; - -interface Env { - AuthStorage: KVNamespace; -} - -patchLogger(); -export default { - async fetch(request: Request, env: Env, ctx: ExecutionContext) { - return issuer({ - select: Select(), - theme: { - title: "Nestri | Auth", - primary: "#FF4F01", - //TODO: Change this in prod - logo: "https://nestri.io/logo.webp", - favicon: "https://nestri.io/seo/favicon.ico", - background: { - light: "#F5F5F5", - dark: "#171717", - }, - radius: "lg", - font: { - family: "Geist, sans-serif", - }, - css: `@import url('https://fonts.googleapis.com/css2?family=Geist:wght@100;200;300;400;500;600;700;800;900&display=swap');`, - }, - subjects, - storage: CloudflareStorage({ - namespace: env.AuthStorage, - }), - providers: { - discord: DiscordAdapter({ - clientID: Resource.DISCORD_CLIENT_ID.value, - clientSecret: Resource.DISCORD_CLIENT_SECRET.value, - scopes: ["email", "identify"], - }), - }, - allow: async (input) => { - const url = new URL(input.redirectURI); - const hostname = url.hostname; - if (hostname.endsWith("nestri.io")) return true; - if (hostname === "localhost") return true; - return false; - }, - success: async (ctx, value, req) => { - let user; - - if (value.provider === "discord") { - const access = value.tokenset.access; - user = await handleDiscord(access); - } - - if (user) { - try { - const matching = await User.fromEmail(user.primary.email); - - //Sign Up - if (!matching) { - const userID = await User.create({ - email: user.primary.email, - name: user.username, - avatarUrl: user.avatar, - }); - - if (!userID) throw new Error("Error creating user"); - - return ctx.subject("user", userID, { - userID, - email: user.primary.email, - }); - } else { - await User.acknowledgeLogin(matching.id); - - //Sign In - return await ctx.subject("user", matching.id, { - userID: matching.id, - email: user.primary.email, - }); - } - } catch (error) { - console.error("error registering the user", error); - } - } - - throw new Error("Something went seriously wrong"); - }, - }) - .use(logger()) - .fetch(request, env, ctx); - }, -}; diff --git a/cloud/packages/functions/src/auth/ui/base.tsx b/cloud/packages/functions/src/auth/ui/base.tsx deleted file mode 100644 index 7183cee1..00000000 --- a/cloud/packages/functions/src/auth/ui/base.tsx +++ /dev/null @@ -1,279 +0,0 @@ -/** @jsxImportSource hono/jsx */ -import { css } from "./css" -import { type PropsWithChildren } from "hono/jsx" -import { getTheme } from "@openauthjs/openauth/ui/theme" - -export function Layout( - props: PropsWithChildren<{ - size?: "small", - page?: "root" | "password" | "popup" - }>, -) { - const theme = getTheme() - function get(key: "primary" | "background" | "logo", mode: "light" | "dark") { - if (!theme) return - if (!theme[key]) return - if (typeof theme[key] === "string") return theme[key] - - return theme[key][mode] as string | undefined - } - - const radius = (() => { - if (theme?.radius === "none") return "0" - if (theme?.radius === "sm") return "1" - if (theme?.radius === "md") return "1.25" - if (theme?.radius === "lg") return "1.5" - if (theme?.radius === "full") return "1000000000001" - return "1" - })() - - const script = "const DEFAULT_COLORS = ['#6A5ACD', '#E63525','#20B2AA', '#E87D58'];" + - "const getModulo = (value, divisor, useEvenCheck) => {" + - "const remainder = value % divisor;" + - "if (useEvenCheck && Math.floor(value / Math.pow(10, useEvenCheck) % 10) % 2 === 0) {" + - " return -remainder;" + - " }" + - " return remainder;" + - " };" + - "const generateColors = (name, colors = DEFAULT_COLORS) => {" + - "const hashCode = name.split('').reduce((acc, char) => {" + - "acc = ((acc << 5) - acc) + char.charCodeAt(0);" + - " return acc & acc;" + - " }, 0);" + - "const hash = Math.abs(hashCode);" + - "const numColors = colors.length;" + - "return Array.from({ length: 3 }, (_, index) => ({" + - "color: colors[(hash + index) % numColors]," + - "translateX: getModulo(hash * (index + 1), 4, 1)," + - "translateY: getModulo(hash * (index + 1), 4, 2)," + - " scale: 1.2 + getModulo(hash * (index + 1), 2) / 10," + - " rotate: getModulo(hash * (index + 1), 360, 1)" + - "}));" + - "};" + - "const generateFallbackAvatar = (text = 'wanjohi', size = 80, colors = DEFAULT_COLORS) => {" + - " const colorData = generateColors(text, colors);" + - " return '' +" + - " 'Fallback avatar for ' + text + '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '' +" + - " '';" + - "};" + - "const input = document.getElementById('username');" + - "const avatarSpan = document.getElementById('username-icon');" + - "input.addEventListener('input', (e) => {" + - " avatarSpan.innerHTML = generateFallbackAvatar(e.target.value);" + - "});"; - - const authWindowScript = ` - const openAuthWindow = async (provider) => { - const POLL_INTERVAL = 300; - const BASE_URL = window.location.origin; - - const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( - navigator.userAgent - ); - - const createDesktopWindow = (authUrl) => { - const config = { - width: 700, - height: 700, - features: "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=no" - }; - - const top = window.top.outerHeight / 2 + window.top.screenY - (config.height / 2); - const left = window.top.outerWidth / 2 + window.top.screenX - (config.width / 2); - - return window.open( - authUrl, - 'Auth Popup', - \`width=\${config.width},height=\${config.height},left=\${left},top=\${top},\${config.features}\` - ); - }; - - const monitorAuthWindow = (targetWindow) => { - return new Promise((resolve, reject) => { - const handleAuthSuccess = (event) => { - if (event.origin !== BASE_URL) return; - - try { - const data = JSON.parse(event.data); - if (data.type === 'auth_success') { - cleanup(); - window.location.href = window.location.origin + "/" + provider + "/callback" + data.searchParams; - resolve(); - } - } catch (e) { - // Ignore invalid JSON messages - } - }; - - window.addEventListener('message', handleAuthSuccess); - - const timer = setInterval(() => { - if (targetWindow.closed) { - cleanup(); - reject(new Error('Authentication window was closed')); - } - }, POLL_INTERVAL); - - function cleanup() { - clearInterval(timer); - window.removeEventListener('message', handleAuthSuccess); - if (!targetWindow.closed) { - targetWindow.location.href = 'about:blank' - targetWindow.close(); - } - window.focus(); - } - }); - }; - - const authUrl = \`\${BASE_URL}/\${provider}/authorize\`; - const newWindow = isMobile ? window.open(authUrl, '_blank') : createDesktopWindow(authUrl); - - if (!newWindow) { - throw new Error('Failed to open authentication window'); - } - - return monitorAuthWindow(newWindow); - }; - - - const buttons = document.querySelectorAll('button[id^="button-"]'); - const formRoot = document.querySelector('[data-component="form-root"]'); - - const setLoadingState = (activeProvider) => { - formRoot.setAttribute('data-disabled', 'true'); - - buttons.forEach(button => { - button.style.pointerEvents = 'none'; - - const provider = button.id.replace('button-', ''); - if (provider === activeProvider) { - button.setAttribute('data-loading', 'true'); - } - }); - }; - - const resetState = () => { - formRoot.removeAttribute('data-disabled'); - - buttons.forEach(button => { - button.style.pointerEvents = ''; - button.removeAttribute('data-loading'); - }); - }; - - buttons.forEach(button => { - const provider = button.id.replace('button-', ''); - - if (provider === "password"){ - button.addEventListener('click', async (e) => { - window.location.href = window.location.origin + "/" + provider + "/authorize"; - }) - } else { - button.addEventListener('click', async (e) => { - try { - setLoadingState(provider); - await openAuthWindow(provider); - } catch (error) { - resetState(); - console.error(\`Authentication failed for \${provider}:\`, error); - } - // finally { - // resetState(); - // } - }); - } - });`; - - const callbackScript = ` - if (window.opener == null) { - window.location.href = "about:blank"; - } - - const searchParams = window.location.search; - - try { - window.opener.postMessage( - JSON.stringify({ - type: 'auth_success', - searchParams: searchParams - }), - window.location.origin - ); - } catch (e) { - console.error('Failed to send message to parent window:', e); - }`; - return ( - - - - {theme?.title || "OpenAuthJS"} - - - \ No newline at end of file diff --git a/packages/play-standalone/src/pages/[room].astro b/packages/play-standalone/src/pages/[room].astro deleted file mode 100644 index f7385df1..00000000 --- a/packages/play-standalone/src/pages/[room].astro +++ /dev/null @@ -1,193 +0,0 @@ ---- -import DefaultLayout from "../layouts/DefaultLayout.astro"; -const { room } = Astro.params; - -// Passing of environment variables to the client side -// gotta love node and it's ecosystem.. -const envs_map: Map = new Map(); -import { PEER_URL, getSecret } from "astro:env/server"; -if (PEER_URL) { - envs_map.set("PEER_URL", getSecret("PEER_URL")); -} - -let envs: string = ""; -if (envs_map.size > 0) { - envs = JSON.stringify(Array.from(envs_map.entries())); -} ---- - - -

Offline

-

Warming up the GPU...

- -
-
- - - - diff --git a/packages/play-standalone/sst-env.d.ts b/packages/play-standalone/sst-env.d.ts deleted file mode 100644 index b6a7e906..00000000 --- a/packages/play-standalone/sst-env.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/* deno-fmt-ignore-file */ - -/// - -import "sst" -export {} \ No newline at end of file diff --git a/packages/play-standalone/tsconfig.json b/packages/play-standalone/tsconfig.json deleted file mode 100644 index 8bf91d3b..00000000 --- a/packages/play-standalone/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "astro/tsconfigs/strict", - "include": [".astro/types.d.ts", "**/*"], - "exclude": ["dist"] -} diff --git a/packages/relay/.dockerignore b/packages/relay/.dockerignore deleted file mode 100644 index 31d0950c..00000000 --- a/packages/relay/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -persist-data/ diff --git a/packages/relay/.gitignore b/packages/relay/.gitignore deleted file mode 100644 index f211832c..00000000 --- a/packages/relay/.gitignore +++ /dev/null @@ -1 +0,0 @@ -persist-data/ \ No newline at end of file diff --git a/packages/relay/go.mod b/packages/relay/go.mod deleted file mode 100644 index 28e53f7f..00000000 --- a/packages/relay/go.mod +++ /dev/null @@ -1,104 +0,0 @@ -module relay - -go 1.25.0 - -require ( - github.com/libp2p/go-libp2p v0.44.0 - github.com/libp2p/go-libp2p-pubsub v0.15.0 - github.com/libp2p/go-reuseport v0.4.0 - github.com/multiformats/go-multiaddr v0.16.1 - github.com/oklog/ulid/v2 v2.1.1 - github.com/pion/ice/v4 v4.0.10 - github.com/pion/interceptor v0.1.41 - github.com/pion/rtp v1.8.25 - github.com/pion/webrtc/v4 v4.1.6 - github.com/prometheus/client_golang v1.23.2 - google.golang.org/protobuf v1.36.10 -) - -require ( - github.com/benbjohnson/clock v1.3.5 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect - github.com/filecoin-project/go-clock v0.1.0 // indirect - github.com/flynn/noise v1.1.0 // indirect - github.com/francoispqt/gojay v1.2.13 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/websocket v1.5.3 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect - github.com/huin/goupnp v1.3.0 // indirect - github.com/ipfs/go-cid v0.6.0 // indirect - github.com/jackpal/go-nat-pmp v1.0.2 // indirect - github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect - github.com/klauspost/compress v1.18.1 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/koron/go-ssdp v0.1.0 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-flow-metrics v0.3.0 // indirect - github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect - github.com/libp2p/go-msgio v0.3.0 // indirect - github.com/libp2p/go-netroute v0.4.0 // indirect - github.com/libp2p/go-yamux/v5 v5.1.0 // indirect - github.com/libp2p/zeroconf/v2 v2.2.0 // indirect - github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect - github.com/miekg/dns v1.1.68 // indirect - github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect - github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect - github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.10.0 // indirect - github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-multistream v0.6.1 // indirect - github.com/multiformats/go-varint v0.1.0 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pion/datachannel v1.5.10 // indirect - github.com/pion/dtls/v2 v2.2.12 // indirect - github.com/pion/dtls/v3 v3.0.7 // indirect - github.com/pion/logging v0.2.4 // indirect - github.com/pion/mdns/v2 v2.0.7 // indirect - github.com/pion/randutil v0.1.0 // indirect - github.com/pion/rtcp v1.2.16 // indirect - github.com/pion/sctp v1.8.40 // indirect - github.com/pion/sdp/v3 v3.0.16 // indirect - github.com/pion/srtp/v3 v3.0.8 // indirect - github.com/pion/stun v0.6.1 // indirect - github.com/pion/stun/v3 v3.0.1 // indirect - github.com/pion/transport/v2 v2.2.10 // indirect - github.com/pion/transport/v3 v3.0.8 // indirect - github.com/pion/turn/v4 v4.1.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.2 // indirect - github.com/prometheus/procfs v0.19.2 // indirect - github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.55.0 // indirect - github.com/quic-go/webtransport-go v0.9.0 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/wlynxg/anet v0.0.5 // indirect - go.uber.org/dig v1.19.0 // indirect - go.uber.org/fx v1.24.0 // indirect - go.uber.org/mock v0.6.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.0 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect - golang.org/x/crypto v0.43.0 // indirect - golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/net v0.46.0 // indirect - golang.org/x/sync v0.17.0 // indirect - golang.org/x/sys v0.37.0 // indirect - golang.org/x/telemetry v0.0.0-20251028164327-d7a2859f34e8 // indirect - golang.org/x/text v0.30.0 // indirect - golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.38.0 // indirect - lukechampine.com/blake3 v1.4.1 // indirect -) diff --git a/packages/relay/go.sum b/packages/relay/go.sum deleted file mode 100644 index 0500e36c..00000000 --- a/packages/relay/go.sum +++ /dev/null @@ -1,473 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= -github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= -github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= -github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= -github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= -github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/ipfs/go-cid v0.6.0 h1:DlOReBV1xhHBhhfy/gBNNTSyfOM6rLiIx9J7A4DGf30= -github.com/ipfs/go-cid v0.6.0/go.mod h1:NC4kS1LZjzfhK40UGmpXv5/qD2kcMzACYJNntCUiDhQ= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= -github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/koron/go-ssdp v0.1.0 h1:ckl5x5H6qSNFmi+wCuROvvGUu2FQnMbQrU95IHCcv3Y= -github.com/koron/go-ssdp v0.1.0/go.mod h1:GltaDBjtK1kemZOusWYLGotV0kBeEf59Bp0wtSB0uyU= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-flow-metrics v0.3.0 h1:q31zcHUvHnwDO0SHaukewPYgwOBSxtt830uJtUx6784= -github.com/libp2p/go-flow-metrics v0.3.0/go.mod h1:nuhlreIwEguM1IvHAew3ij7A8BMlyHQJ279ao24eZZo= -github.com/libp2p/go-libp2p v0.44.0 h1:5Gtt8OrF8yiXmH+Mx4+/iBeFRMK1TY3a8OrEBDEqAvs= -github.com/libp2p/go-libp2p v0.44.0/go.mod h1:NovCojezAt4dnDd4fH048K7PKEqH0UFYYqJRjIIu8zc= -github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= -github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-pubsub v0.15.0 h1:cG7Cng2BT82WttmPFMi50gDNV+58K626m/wR00vGL1o= -github.com/libp2p/go-libp2p-pubsub v0.15.0/go.mod h1:lr4oE8bFgQaifRcoc2uWhWWiK6tPdOEKpUuR408GFN4= -github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= -github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= -github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= -github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-netroute v0.4.0 h1:sZZx9hyANYUx9PZyqcgE/E1GUG3iEtTZHUEvdtXT7/Q= -github.com/libp2p/go-netroute v0.4.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA= -github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= -github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= -github.com/libp2p/go-yamux/v5 v5.1.0 h1:8Qlxj4E9JGJAQVW6+uj2o7mqkqsIVlSUGmTWhlXzoHE= -github.com/libp2p/go-yamux/v5 v5.1.0/go.mod h1:tgIQ07ObtRR/I0IWsFOyQIL9/dR5UXgc2s8xKmNZv1o= -github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= -github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marcopolo/simnet v0.0.1 h1:rSMslhPz6q9IvJeFWDoMGxMIrlsbXau3NkuIXHGJxfg= -github.com/marcopolo/simnet v0.0.1/go.mod h1:WDaQkgLAjqDUEBAOXz22+1j6wXKfGlC5sD5XWt3ddOs= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= -github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.16.1 h1:fgJ0Pitow+wWXzN9do+1b8Pyjmo8m5WhGfzpL82MpCw= -github.com/multiformats/go-multiaddr v0.16.1/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0= -github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= -github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.10.0 h1:UpP223cig/Cx8J76jWt91njpK3GTAO1w02sdcjZDSuc= -github.com/multiformats/go-multicodec v0.10.0/go.mod h1:wg88pM+s2kZJEQfRCKBNU+g32F5aWBEjyFHXvZLTcLI= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= -github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ= -github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw= -github.com/multiformats/go-varint v0.1.0 h1:i2wqFp4sdl3IcIxfAonHQV9qU5OsZ4Ts9IOoETFs5dI= -github.com/multiformats/go-varint v0.1.0/go.mod h1:5KVAVXegtfmNQQm/lCY+ATvDzvJJhSkUlGQV9wgObdI= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s= -github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= -github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= -github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= -github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= -github.com/pion/dtls/v3 v3.0.7 h1:bItXtTYYhZwkPFk4t1n3Kkf5TDrfj6+4wG+CZR8uI9Q= -github.com/pion/dtls/v3 v3.0.7/go.mod h1:uDlH5VPrgOQIw59irKYkMudSFprY9IEFCqz/eTz16f8= -github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4= -github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= -github.com/pion/interceptor v0.1.41 h1:NpvX3HgWIukTf2yTBVjVGFXtpSpWgXjqz7IIpu7NsOw= -github.com/pion/interceptor v0.1.41/go.mod h1:nEt4187unvRXJFyjiw00GKo+kIuXMWQI9K89fsosDLY= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= -github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= -github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= -github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= -github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= -github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= -github.com/pion/rtcp v1.2.16/go.mod h1:/as7VKfYbs5NIb4h6muQ35kQF/J0ZVNz2Z3xKoCBYOo= -github.com/pion/rtp v1.8.25 h1:b8+y44GNbwOJTYWuVan7SglX/hMlicVCAtL50ztyZHw= -github.com/pion/rtp v1.8.25/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= -github.com/pion/sctp v1.8.40 h1:bqbgWYOrUhsYItEnRObUYZuzvOMsVplS3oNgzedBlG8= -github.com/pion/sctp v1.8.40/go.mod h1:SPBBUENXE6ThkEksN5ZavfAhFYll+h+66ZiG6IZQuzo= -github.com/pion/sdp/v3 v3.0.16 h1:0dKzYO6gTAvuLaAKQkC02eCPjMIi4NuAr/ibAwrGDCo= -github.com/pion/sdp/v3 v3.0.16/go.mod h1:9tyKzznud3qiweZcD86kS0ff1pGYB3VX+Bcsmkx6IXo= -github.com/pion/srtp/v3 v3.0.8 h1:RjRrjcIeQsilPzxvdaElN0CpuQZdMvcl9VZ5UY9suUM= -github.com/pion/srtp/v3 v3.0.8/go.mod h1:2Sq6YnDH7/UDCvkSoHSDNDeyBcFgWL0sAVycVbAsXFg= -github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= -github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/stun/v3 v3.0.1 h1:jx1uUq6BdPihF0yF33Jj2mh+C9p0atY94IkdnW174kA= -github.com/pion/stun/v3 v3.0.1/go.mod h1:RHnvlKFg+qHgoKIqtQWMOJF52wsImCAf/Jh5GjX+4Tw= -github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= -github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= -github.com/pion/transport/v3 v3.0.8 h1:oI3myyYnTKUSTthu/NZZ8eu2I5sHbxbUNNFW62olaYc= -github.com/pion/transport/v3 v3.0.8/go.mod h1:+c2eewC5WJQHiAA46fkMMzoYZSuGzA/7E2FPrOYHctQ= -github.com/pion/turn/v4 v4.1.2 h1:Em2svpl6aBFa88dLhxypMUzaLjC79kWZWx8FIov01cc= -github.com/pion/turn/v4 v4.1.2/go.mod h1:ISYWfZYy0Z3tXzRpyYZHTL+U23yFQIspfxogdQ8pn9Y= -github.com/pion/webrtc/v4 v4.1.6 h1:srHH2HwvCGwPba25EYJgUzgLqCQoXl1VCUnrGQMSzUw= -github.com/pion/webrtc/v4 v4.1.6/go.mod h1:wKecGRlkl3ox/As/MYghJL+b/cVXMEhoPMJWPuGQFhU= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.67.2 h1:PcBAckGFTIHt2+L3I33uNRTlKTplNzFctXcWhPyAEN8= -github.com/prometheus/common v0.67.2/go.mod h1:63W3KZb1JOKgcjlIr64WW/LvFGAqKPj0atm+knVGEko= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= -github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= -github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= -github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= -github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= -github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70= -github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= -github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= -go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= -go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= -go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= -golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= -golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= -golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20251028164327-d7a2859f34e8 h1:DwMAzqwLj2rVin75cRFh1kfhwQY3hyHrU1oCEDZXPmQ= -golang.org/x/telemetry v0.0.0-20251028164327-d7a2859f34e8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= -lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/packages/relay/internal/common/common.go b/packages/relay/internal/common/common.go deleted file mode 100644 index 6e90e843..00000000 --- a/packages/relay/internal/common/common.go +++ /dev/null @@ -1,217 +0,0 @@ -package common - -import ( - "fmt" - "github.com/pion/interceptor/pkg/nack" - "log/slog" - "strconv" - - "github.com/libp2p/go-reuseport" - "github.com/pion/ice/v4" - "github.com/pion/interceptor" - "github.com/pion/webrtc/v4" -) - -var globalWebRTCAPI *webrtc.API -var globalWebRTCConfig = webrtc.Configuration{ - ICETransportPolicy: webrtc.ICETransportPolicyAll, - BundlePolicy: webrtc.BundlePolicyBalanced, - SDPSemantics: webrtc.SDPSemanticsUnifiedPlan, -} - -func InitWebRTCAPI() error { - var err error - flags := GetFlags() - - // Media engine - mediaEngine := &webrtc.MediaEngine{} - - // Register our extensions - if err = RegisterExtensions(mediaEngine); err != nil { - return fmt.Errorf("failed to register extensions: %w", err) - } - - // Register codecs - for _, codec := range []webrtc.RTPCodecParameters{ - { - RTPCodecCapability: webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeOpus, ClockRate: 48000, Channels: 2, SDPFmtpLine: "minptime=10;useinbandfec=1"}, - PayloadType: 111, - }, - } { - if err = mediaEngine.RegisterCodec(codec, webrtc.RTPCodecTypeAudio); err != nil { - return err - } - } - - videoRTCPFeedback := []webrtc.RTCPFeedback{{"nack", ""}, {"nack", "pli"}} - for _, codec := range []webrtc.RTPCodecParameters{ - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 102, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 104, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 106, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 108, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 127, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, - ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 39, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH265, - ClockRate: 90000, - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 116, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeAV1, ClockRate: 90000, RTCPFeedback: videoRTCPFeedback}, - PayloadType: 45, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeVP9, ClockRate: 90000, SDPFmtpLine: "profile-id=0", RTCPFeedback: videoRTCPFeedback}, - PayloadType: 98, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeVP9, ClockRate: 90000, SDPFmtpLine: "profile-id=2", RTCPFeedback: videoRTCPFeedback}, - PayloadType: 100, - }, - { - RTPCodecCapability: webrtc.RTPCodecCapability{ - MimeType: webrtc.MimeTypeH264, ClockRate: 90000, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f", - RTCPFeedback: videoRTCPFeedback, - }, - PayloadType: 112, - }, - } { - if err = mediaEngine.RegisterCodec(codec, webrtc.RTPCodecTypeVideo); err != nil { - return err - } - } - - // Interceptor registry - interceptorRegistry := &interceptor.Registry{} - - // Register our interceptors.. - nackGenFactory, err := nack.NewGeneratorInterceptor() - if err != nil { - return err - } - interceptorRegistry.Add(nackGenFactory) - nackRespFactory, err := nack.NewResponderInterceptor() - if err != nil { - return err - } - interceptorRegistry.Add(nackRespFactory) - - if err = webrtc.ConfigureRTCPReports(interceptorRegistry); err != nil { - return err - } - - // Setting engine - settingEngine := webrtc.SettingEngine{} - - // New in v4, reduces CPU usage and latency when enabled - settingEngine.EnableSCTPZeroChecksum(true) - - nat11IP := GetFlags().NAT11IP - if len(nat11IP) > 0 { - settingEngine.SetNAT1To1IPs([]string{nat11IP}, webrtc.ICECandidateTypeHost) - slog.Info("Using NAT 1:1 IP for WebRTC", "nat11_ip", nat11IP) - } - - muxPort := GetFlags().UDPMuxPort - if muxPort > 0 { - // Use reuseport to allow multiple listeners on the same port - pktListener, err := reuseport.ListenPacket("udp", ":"+strconv.Itoa(muxPort)) - if err != nil { - return fmt.Errorf("failed to create WebRTC muxed UDP listener: %w", err) - } - - mux := ice.NewMultiUDPMuxDefault(ice.NewUDPMuxDefault(ice.UDPMuxParams{ - UDPConn: pktListener, - })) - slog.Info("Using UDP Mux for WebRTC", "port", muxPort) - settingEngine.SetICEUDPMux(mux) - } - - if flags.WebRTCUDPStart > 0 && flags.WebRTCUDPEnd > 0 && flags.WebRTCUDPStart < flags.WebRTCUDPEnd { - // Set the UDP port range used by WebRTC - err = settingEngine.SetEphemeralUDPPortRange(uint16(flags.WebRTCUDPStart), uint16(flags.WebRTCUDPEnd)) - if err != nil { - return err - } - slog.Info("Using WebRTC UDP Port Range", "start", flags.WebRTCUDPStart, "end", flags.WebRTCUDPEnd) - } - - // Improves speed when sending offers to browsers (https://github.com/pion/webrtc/issues/3174) - settingEngine.SetIncludeLoopbackCandidate(true) - - // Create a new API object with our customized settings - globalWebRTCAPI = webrtc.NewAPI(webrtc.WithMediaEngine(mediaEngine), webrtc.WithSettingEngine(settingEngine), webrtc.WithInterceptorRegistry(interceptorRegistry)) - - return nil -} - -// CreatePeerConnection sets up a new peer connection -func CreatePeerConnection(onClose func()) (*webrtc.PeerConnection, error) { - pc, err := globalWebRTCAPI.NewPeerConnection(globalWebRTCConfig) - if err != nil { - return nil, err - } - - // Log connection state changes and handle failed/disconnected connections - pc.OnConnectionStateChange(func(connectionState webrtc.PeerConnectionState) { - // Close PeerConnection in cases - if connectionState == webrtc.PeerConnectionStateFailed || - connectionState == webrtc.PeerConnectionStateDisconnected || - connectionState == webrtc.PeerConnectionStateClosed { - err = pc.Close() - if err != nil { - slog.Error("Failed to close PeerConnection", "err", err) - } - onClose() - } - }) - - return pc, nil -} diff --git a/packages/relay/internal/common/crypto.go b/packages/relay/internal/common/crypto.go deleted file mode 100644 index 79aefd5c..00000000 --- a/packages/relay/internal/common/crypto.go +++ /dev/null @@ -1,51 +0,0 @@ -package common - -import ( - "crypto/ed25519" - "crypto/rand" - "errors" - "fmt" - "os" - "time" - - "github.com/oklog/ulid/v2" -) - -func NewULID() (ulid.ULID, error) { - return ulid.New(ulid.Timestamp(time.Now()), ulid.Monotonic(rand.Reader, 0)) -} - -// GenerateED25519Key generates a new ED25519 key -func GenerateED25519Key() (ed25519.PrivateKey, error) { - _, priv, err := ed25519.GenerateKey(rand.Reader) - if err != nil { - return nil, fmt.Errorf("failed to generate ED25519 key pair: %w", err) - } - return priv, nil -} - -// SaveED25519Key saves an ED25519 private key to a path as a binary file -func SaveED25519Key(privateKey ed25519.PrivateKey, filePath string) error { - if privateKey == nil { - return errors.New("private key cannot be nil") - } - if len(privateKey) != ed25519.PrivateKeySize { - return errors.New("private key must be exactly 64 bytes for ED25519") - } - if err := os.WriteFile(filePath, privateKey, 0600); err != nil { - return fmt.Errorf("failed to save ED25519 key to %s: %w", filePath, err) - } - return nil -} - -// LoadED25519Key loads an ED25519 private key binary file from a path -func LoadED25519Key(filePath string) (ed25519.PrivateKey, error) { - data, err := os.ReadFile(filePath) - if err != nil { - return nil, fmt.Errorf("failed to read ED25519 key from %s: %w", filePath, err) - } - if len(data) != ed25519.PrivateKeySize { - return nil, fmt.Errorf("ED25519 key must be exactly %d bytes, got %d", ed25519.PrivateKeySize, len(data)) - } - return data, nil -} diff --git a/packages/relay/internal/common/extensions.go b/packages/relay/internal/common/extensions.go deleted file mode 100644 index 1ecaddbe..00000000 --- a/packages/relay/internal/common/extensions.go +++ /dev/null @@ -1,45 +0,0 @@ -package common - -import "github.com/pion/webrtc/v4" - -const ( - ExtensionPlayoutDelay string = "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay" -) - -// ExtensionMap maps audio/video extension URIs to their IDs based on registration order -var ExtensionMap = map[webrtc.RTPCodecType]map[string]uint8{} - -func RegisterExtensions(mediaEngine *webrtc.MediaEngine) error { - // Register additional header extensions to reduce latency - // Playout Delay (Video) - if err := mediaEngine.RegisterHeaderExtension(webrtc.RTPHeaderExtensionCapability{ - URI: ExtensionPlayoutDelay, - }, webrtc.RTPCodecTypeVideo); err != nil { - return err - } - // Playout Delay (Audio) - if err := mediaEngine.RegisterHeaderExtension(webrtc.RTPHeaderExtensionCapability{ - URI: ExtensionPlayoutDelay, - }, webrtc.RTPCodecTypeAudio); err != nil { - return err - } - - // Register the extension IDs for both audio and video - ExtensionMap[webrtc.RTPCodecTypeAudio] = map[string]uint8{ - ExtensionPlayoutDelay: 1, - } - ExtensionMap[webrtc.RTPCodecTypeVideo] = map[string]uint8{ - ExtensionPlayoutDelay: 1, - } - - return nil -} - -func GetExtension(codecType webrtc.RTPCodecType, extURI string) (uint8, bool) { - cType, ok := ExtensionMap[codecType] - if !ok { - return 0, false - } - extID, ok := cType[extURI] - return extID, ok -} diff --git a/packages/relay/internal/common/flags.go b/packages/relay/internal/common/flags.go deleted file mode 100644 index 54a99183..00000000 --- a/packages/relay/internal/common/flags.go +++ /dev/null @@ -1,135 +0,0 @@ -package common - -import ( - "flag" - "log/slog" - "net" - "os" - "strconv" - - "github.com/pion/webrtc/v4" -) - -var globalFlags *Flags - -type Flags struct { - RegenIdentity bool // Remove old identity on startup and regenerate it - Verbose bool // Log everything to console - Debug bool // Enable debug mode, implies Verbose - EndpointPort int // Port for HTTP/S and WS/S endpoint (TCP) - WebRTCUDPStart int // WebRTC UDP port range start - ignored if UDPMuxPort is set - WebRTCUDPEnd int // WebRTC UDP port range end - ignored if UDPMuxPort is set - STUNServer string // WebRTC STUN server - UDPMuxPort int // WebRTC UDP mux port - if set, overrides UDP port range - AutoAddLocalIP bool // Automatically add local IP to NAT 1 to 1 IPs - NAT11IP string // WebRTC NAT 1 to 1 IP - allows specifying IP of relay if behind NAT - PersistDir string // Directory to save persistent data to - Metrics bool // Enable metrics endpoint - MetricsPort int // Port for metrics endpoint -} - -func (flags *Flags) DebugLog() { - slog.Debug("Relay flags", - "regenIdentity", flags.RegenIdentity, - "verbose", flags.Verbose, - "debug", flags.Debug, - "endpointPort", flags.EndpointPort, - "webrtcUDPStart", flags.WebRTCUDPStart, - "webrtcUDPEnd", flags.WebRTCUDPEnd, - "stunServer", flags.STUNServer, - "webrtcUDPMux", flags.UDPMuxPort, - "autoAddLocalIP", flags.AutoAddLocalIP, - "webrtcNAT11IPs", flags.NAT11IP, - "persistDir", flags.PersistDir, - "metrics", flags.Metrics, - "metricsPort", flags.MetricsPort, - ) -} - -func getEnvAsInt(name string, defaultVal int) int { - valueStr := os.Getenv(name) - if value, err := strconv.Atoi(valueStr); err != nil { - return defaultVal - } else { - return value - } -} - -func getEnvAsBool(name string, defaultVal bool) bool { - valueStr := os.Getenv(name) - val, err := strconv.ParseBool(valueStr) - if err != nil { - return defaultVal - } - return val -} - -func getEnvAsString(name string, defaultVal string) string { - valueStr := os.Getenv(name) - if len(valueStr) == 0 { - return defaultVal - } - return valueStr -} - -func InitFlags() { - // Create Flags struct - globalFlags = &Flags{} - // Get flags - flag.BoolVar(&globalFlags.RegenIdentity, "regenIdentity", getEnvAsBool("REGEN_IDENTITY", false), "Regenerate identity on startup") - flag.BoolVar(&globalFlags.Verbose, "verbose", getEnvAsBool("VERBOSE", false), "Verbose mode") - flag.BoolVar(&globalFlags.Debug, "debug", getEnvAsBool("DEBUG", false), "Debug mode") - flag.IntVar(&globalFlags.EndpointPort, "endpointPort", getEnvAsInt("ENDPOINT_PORT", 8088), "HTTP endpoint port") - flag.IntVar(&globalFlags.WebRTCUDPStart, "webrtcUDPStart", getEnvAsInt("WEBRTC_UDP_START", 0), "WebRTC UDP port range start") - flag.IntVar(&globalFlags.WebRTCUDPEnd, "webrtcUDPEnd", getEnvAsInt("WEBRTC_UDP_END", 0), "WebRTC UDP port range end") - flag.StringVar(&globalFlags.STUNServer, "stunServer", getEnvAsString("STUN_SERVER", "stun.l.google.com:19302"), "WebRTC STUN server") - flag.IntVar(&globalFlags.UDPMuxPort, "webrtcUDPMux", getEnvAsInt("WEBRTC_UDP_MUX", 9099), "WebRTC UDP mux port") - flag.BoolVar(&globalFlags.AutoAddLocalIP, "autoAddLocalIP", getEnvAsBool("AUTO_ADD_LOCAL_IP", false), "Automatically add local IP to NAT 1 to 1 IPs") - // String with comma separated IPs - nat11IP := "" - flag.StringVar(&nat11IP, "webrtcNAT11IP", getEnvAsString("WEBRTC_NAT_IP", ""), "WebRTC NAT 1 to 1 IP") - flag.StringVar(&globalFlags.PersistDir, "persistDir", getEnvAsString("PERSIST_DIR", "./persist-data"), "Directory to save persistent data to") - flag.BoolVar(&globalFlags.Metrics, "metrics", getEnvAsBool("METRICS", false), "Enable metrics endpoint") - flag.IntVar(&globalFlags.MetricsPort, "metricsPort", getEnvAsInt("METRICS_PORT", 3030), "Port for metrics endpoint") - // Parse flags - flag.Parse() - - // If debug is enabled, verbose is also enabled - if globalFlags.Debug { - globalFlags.Verbose = true - } - - // ICE STUN servers - globalWebRTCConfig.ICEServers = []webrtc.ICEServer{ - { - URLs: []string{"stun:" + globalFlags.STUNServer}, - }, - } - - // Parse NAT 1 to 1 IPs from string - if len(nat11IP) > 0 { - globalFlags.NAT11IP = nat11IP - } else if globalFlags.AutoAddLocalIP { - globalFlags.NAT11IP = getLocalIP() - } -} - -func GetFlags() *Flags { - return globalFlags -} - -// getLocalIP returns local IP, be it either IPv4 or IPv6, skips loopback addresses -func getLocalIP() string { - addrs, err := net.InterfaceAddrs() - if err != nil { - return "" - } - for _, address := range addrs { - if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && !ipnet.IP.IsPrivate() && !ipnet.IP.IsUnspecified() { - if ipnet.IP.To4() != nil || ipnet.IP != nil { - return ipnet.IP.String() - } - } - } - return "" -} diff --git a/packages/relay/internal/common/ice_helper.go b/packages/relay/internal/common/ice_helper.go deleted file mode 100644 index d519fd1c..00000000 --- a/packages/relay/internal/common/ice_helper.go +++ /dev/null @@ -1,53 +0,0 @@ -package common - -import ( - "log/slog" - - "github.com/pion/webrtc/v4" -) - -// ICEHelper holds webrtc.ICECandidateInit(s) until remote candidate is set for given webrtc.PeerConnection -// Held candidates should be flushed at the end of negotiation to ensure all are available for connection -type ICEHelper struct { - candidates []webrtc.ICECandidateInit - pc *webrtc.PeerConnection -} - -func NewICEHelper(pc *webrtc.PeerConnection) *ICEHelper { - return &ICEHelper{ - pc: pc, - candidates: make([]webrtc.ICECandidateInit, 0), - } -} - -func (ice *ICEHelper) SetPeerConnection(pc *webrtc.PeerConnection) { - ice.pc = pc -} - -func (ice *ICEHelper) AddCandidate(c webrtc.ICECandidateInit) { - if ice.pc != nil { - if ice.pc.RemoteDescription() != nil { - // Add immediately if remote is set - if err := ice.pc.AddICECandidate(c); err != nil { - slog.Error("Failed to add ICE candidate", "err", err) - } - // Also flush held candidates automatically - ice.FlushHeldCandidates() - } else { - // Hold in slice until remote is set - ice.candidates = append(ice.candidates, c) - } - } -} - -func (ice *ICEHelper) FlushHeldCandidates() { - if ice.pc != nil && len(ice.candidates) > 0 { - for _, heldCandidate := range ice.candidates { - if err := ice.pc.AddICECandidate(heldCandidate); err != nil { - slog.Error("Failed to add held ICE candidate", "err", err) - } - } - // Clear the held candidates - ice.candidates = make([]webrtc.ICECandidateInit, 0) - } -} diff --git a/packages/relay/internal/common/latency.go b/packages/relay/internal/common/latency.go deleted file mode 100644 index a1dc548a..00000000 --- a/packages/relay/internal/common/latency.go +++ /dev/null @@ -1,133 +0,0 @@ -package common - -import ( - "fmt" - gen "relay/internal/proto" - "time" - - "google.golang.org/protobuf/types/known/timestamppb" -) - -type TimestampEntry struct { - Stage string `json:"stage"` - Time time.Time `json:"time"` -} - -// LatencyTracker provides a generic structure for measuring time taken at various stages in message processing. -// It can be embedded in message structs for tracking the flow of data and calculating round-trip latency. -type LatencyTracker struct { - SequenceID string `json:"sequence_id"` - Timestamps []TimestampEntry `json:"timestamps"` -} - -// NewLatencyTracker initializes a new LatencyTracker with the given sequence ID -func NewLatencyTracker(sequenceID string) *LatencyTracker { - return &LatencyTracker{ - SequenceID: sequenceID, - Timestamps: make([]TimestampEntry, 0), - } -} - -// AddTimestamp adds a new timestamp for a specific stage -func (lt *LatencyTracker) AddTimestamp(stage string) { - lt.Timestamps = append(lt.Timestamps, TimestampEntry{ - Stage: stage, - // Ensure extremely precise UTC RFC3339 timestamps (down to nanoseconds) - Time: time.Now().UTC(), - }) -} - -// TotalLatency calculates the total latency from the earliest to the latest timestamp -func (lt *LatencyTracker) TotalLatency() (int64, error) { - if len(lt.Timestamps) < 2 { - return 0, nil // Not enough timestamps to calculate latency - } - - var earliest, latest time.Time - for _, ts := range lt.Timestamps { - if earliest.IsZero() || ts.Time.Before(earliest) { - earliest = ts.Time - } - if latest.IsZero() || ts.Time.After(latest) { - latest = ts.Time - } - } - - return latest.Sub(earliest).Milliseconds(), nil -} - -// PainPoints returns a list of stages where the duration exceeds the given threshold. -func (lt *LatencyTracker) PainPoints(threshold time.Duration) []string { - var painPoints []string - var lastStage string - var lastTime time.Time - - for _, ts := range lt.Timestamps { - stage := ts.Stage - if lastStage == "" { - lastStage = stage - lastTime = ts.Time - continue - } - - currentTime := ts.Time - if currentTime.Sub(lastTime) > threshold { - painPoints = append(painPoints, fmt.Sprintf("%s -> %s", lastStage, stage)) - } - - lastStage = stage - lastTime = currentTime - } - return painPoints -} - -// StageLatency calculates the time taken between two specific stages. -func (lt *LatencyTracker) StageLatency(startStage, endStage string) (time.Duration, error) { - var startTime, endTime time.Time - for _, ts := range lt.Timestamps { - if ts.Stage == startStage { - startTime = ts.Time - } - if ts.Stage == endStage { - endTime = ts.Time - } - } - - /*if startTime == "" || endTime == "" { - return 0, fmt.Errorf("missing timestamps for stages: %s -> %s", startStage, endStage) - }*/ - - return endTime.Sub(startTime), nil -} - -func LatencyTrackerFromProto(protolt *gen.ProtoLatencyTracker) *LatencyTracker { - ret := &LatencyTracker{ - SequenceID: protolt.GetSequenceId(), - Timestamps: make([]TimestampEntry, 0), - } - - for _, ts := range protolt.GetTimestamps() { - ret.Timestamps = append(ret.Timestamps, TimestampEntry{ - Stage: ts.GetStage(), - Time: ts.GetTime().AsTime(), - }) - } - - return ret -} - -func (lt *LatencyTracker) ToProto() *gen.ProtoLatencyTracker { - ret := &gen.ProtoLatencyTracker{ - SequenceId: lt.SequenceID, - Timestamps: make([]*gen.ProtoTimestampEntry, len(lt.Timestamps)), - } - - for i, timestamp := range lt.Timestamps { - ret.Timestamps[i] = &gen.ProtoTimestampEntry{ - Stage: timestamp.Stage, - Time: timestamppb.New(timestamp.Time), - } - } - - return ret -} diff --git a/packages/relay/internal/common/loghandler.go b/packages/relay/internal/common/loghandler.go deleted file mode 100644 index 42141652..00000000 --- a/packages/relay/internal/common/loghandler.go +++ /dev/null @@ -1,48 +0,0 @@ -package common - -import ( - "context" - "fmt" - "log/slog" - "os" - "strings" -) - -type CustomHandler struct { - Handler slog.Handler -} - -func (h *CustomHandler) Enabled(_ context.Context, level slog.Level) bool { - return h.Handler.Enabled(nil, level) -} - -func (h *CustomHandler) Handle(_ context.Context, r slog.Record) error { - // Format the timestamp as "2006/01/02 15:04:05" - timestamp := r.Time.Format("2006/01/02 15:04:05") - // Convert level to uppercase string (e.g., "INFO") - level := strings.ToUpper(r.Level.String()) - // Build the message - msg := fmt.Sprintf("%s %s %s", timestamp, level, r.Message) - - // Handle additional attributes if they exist - var attrs []string - r.Attrs(func(a slog.Attr) bool { - attrs = append(attrs, fmt.Sprintf("%s=%v", a.Key, a.Value)) - return true - }) - if len(attrs) > 0 { - msg += " " + strings.Join(attrs, " ") - } - - // Write the formatted message to stdout - _, err := fmt.Fprintln(os.Stdout, msg) - return err -} - -func (h *CustomHandler) WithAttrs(attrs []slog.Attr) slog.Handler { - return &CustomHandler{Handler: h.Handler.WithAttrs(attrs)} -} - -func (h *CustomHandler) WithGroup(name string) slog.Handler { - return &CustomHandler{Handler: h.Handler.WithGroup(name)} -} diff --git a/packages/relay/internal/common/safebufio.go b/packages/relay/internal/common/safebufio.go deleted file mode 100644 index 33558609..00000000 --- a/packages/relay/internal/common/safebufio.go +++ /dev/null @@ -1,127 +0,0 @@ -package common - -import ( - "bufio" - "encoding/binary" - "errors" - "io" - gen "relay/internal/proto" - "sync" - - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/types/known/timestamppb" -) - -// readUvarint reads an unsigned varint from the reader -func readUvarint(r io.ByteReader) (uint64, error) { - return binary.ReadUvarint(r) -} - -// writeUvarint writes an unsigned varint to the writer -func writeUvarint(w io.Writer, x uint64) error { - buf := make([]byte, binary.MaxVarintLen64) - n := binary.PutUvarint(buf, x) - _, err := w.Write(buf[:n]) - return err -} - -// SafeBufioRW wraps a bufio.ReadWriter for sending and receiving JSON and protobufs safely -type SafeBufioRW struct { - brw *bufio.ReadWriter - mutex sync.RWMutex -} - -func NewSafeBufioRW(brw *bufio.ReadWriter) *SafeBufioRW { - return &SafeBufioRW{brw: brw} -} - -func (bu *SafeBufioRW) SendProto(msg proto.Message) error { - bu.mutex.Lock() - defer bu.mutex.Unlock() - - protoData, err := proto.Marshal(msg) - if err != nil { - return err - } - - // Write varint length prefix - if err := writeUvarint(bu.brw, uint64(len(protoData))); err != nil { - return err - } - - // Write the Protobuf data - if _, err := bu.brw.Write(protoData); err != nil { - return err - } - - return bu.brw.Flush() -} - -func (bu *SafeBufioRW) ReceiveProto(msg proto.Message) error { - bu.mutex.RLock() - defer bu.mutex.RUnlock() - - // Read varint length prefix - length, err := readUvarint(bu.brw) - if err != nil { - return err - } - - // Read the Protobuf data - data := make([]byte, length) - if _, err := io.ReadFull(bu.brw, data); err != nil { - return err - } - - return proto.Unmarshal(data, msg) -} - -type CreateMessageOptions struct { - SequenceID string - Latency *gen.ProtoLatencyTracker -} - -func CreateMessage(payload proto.Message, payloadType string, opts *CreateMessageOptions) (*gen.ProtoMessage, error) { - msg := &gen.ProtoMessage{ - MessageBase: &gen.ProtoMessageBase{ - PayloadType: payloadType, - }, - } - - if opts != nil { - if opts.Latency != nil { - msg.MessageBase.Latency = opts.Latency - } else if opts.SequenceID != "" { - msg.MessageBase.Latency = &gen.ProtoLatencyTracker{ - SequenceId: opts.SequenceID, - Timestamps: []*gen.ProtoTimestampEntry{ - { - Stage: "created", - Time: timestamppb.Now(), - }, - }, - } - } - } - - // Use reflection to set the oneof field automatically - msgReflect := msg.ProtoReflect() - payloadReflect := payload.ProtoReflect() - - oneofDesc := msgReflect.Descriptor().Oneofs().ByName("payload") - if oneofDesc == nil { - return nil, errors.New("payload oneof not found") - } - - fields := oneofDesc.Fields() - for i := 0; i < fields.Len(); i++ { - field := fields.Get(i) - if field.Message() != nil && field.Message().FullName() == payloadReflect.Descriptor().FullName() { - msgReflect.Set(field, protoreflect.ValueOfMessage(payloadReflect)) - return msg, nil - } - } - - return nil, errors.New("payload type not found in oneof") -} diff --git a/packages/relay/internal/common/safemap.go b/packages/relay/internal/common/safemap.go deleted file mode 100644 index d366267f..00000000 --- a/packages/relay/internal/common/safemap.go +++ /dev/null @@ -1,97 +0,0 @@ -package common - -import ( - "encoding/json" - "fmt" - "sync" -) - -// SafeMap is a generic thread-safe map with its own mutex -type SafeMap[K comparable, V any] struct { - mu sync.RWMutex - m map[K]V -} - -// NewSafeMap creates a new SafeMap instance -func NewSafeMap[K comparable, V any]() *SafeMap[K, V] { - return &SafeMap[K, V]{ - m: make(map[K]V), - } -} - -// Get retrieves a value from the map -func (sm *SafeMap[K, V]) Get(key K) (V, bool) { - sm.mu.RLock() - defer sm.mu.RUnlock() - v, ok := sm.m[key] - return v, ok -} - -// Has checks if a key exists in the map -func (sm *SafeMap[K, V]) Has(key K) bool { - sm.mu.RLock() - defer sm.mu.RUnlock() - _, ok := sm.m[key] - return ok -} - -// Set adds or updates a value in the map -func (sm *SafeMap[K, V]) Set(key K, value V) { - sm.mu.Lock() - defer sm.mu.Unlock() - sm.m[key] = value -} - -// Delete removes a key from the map -func (sm *SafeMap[K, V]) Delete(key K) { - sm.mu.Lock() - defer sm.mu.Unlock() - delete(sm.m, key) -} - -// Len returns the number of items in the map -func (sm *SafeMap[K, V]) Len() int { - sm.mu.RLock() - defer sm.mu.RUnlock() - return len(sm.m) -} - -// Copy creates a shallow copy of the map and returns it -func (sm *SafeMap[K, V]) Copy() map[K]V { - sm.mu.RLock() - defer sm.mu.RUnlock() - copied := make(map[K]V, len(sm.m)) - for k, v := range sm.m { - copied[k] = v - } - return copied -} - -// Range iterates over the map and applies a function to each key-value pair -func (sm *SafeMap[K, V]) Range(f func(K, V) bool) { - sm.mu.RLock() - defer sm.mu.RUnlock() - for k, v := range sm.m { - if !f(k, v) { - break - } - } -} - -func (sm *SafeMap[K, V]) MarshalJSON() ([]byte, error) { - sm.mu.RLock() - defer sm.mu.RUnlock() - return json.Marshal(sm.m) -} - -func (sm *SafeMap[K, V]) UnmarshalJSON(data []byte) error { - sm.mu.Lock() - defer sm.mu.Unlock() - return json.Unmarshal(data, &sm.m) -} - -func (sm *SafeMap[K, V]) String() string { - sm.mu.RLock() - defer sm.mu.RUnlock() - return fmt.Sprintf("%+v", sm.m) -} diff --git a/packages/relay/internal/connections/datachannel.go b/packages/relay/internal/connections/datachannel.go deleted file mode 100644 index 07ec4992..00000000 --- a/packages/relay/internal/connections/datachannel.go +++ /dev/null @@ -1,79 +0,0 @@ -package connections - -import ( - "log/slog" - gen "relay/internal/proto" - - "github.com/pion/webrtc/v4" - "google.golang.org/protobuf/proto" -) - -type OnMessageCallback func(data []byte) - -// NestriDataChannel is a custom data channel with callbacks -type NestriDataChannel struct { - *webrtc.DataChannel - callbacks map[string]OnMessageCallback // MessageBase type -> callback -} - -// NewNestriDataChannel creates a new NestriDataChannel from *webrtc.DataChannel -func NewNestriDataChannel(dc *webrtc.DataChannel) *NestriDataChannel { - ndc := &NestriDataChannel{ - DataChannel: dc, - callbacks: make(map[string]OnMessageCallback), - } - - // Handler for incoming messages - ndc.OnMessage(func(msg webrtc.DataChannelMessage) { - // If string type message, ignore - if msg.IsString { - return - } - - // Decode message - var base gen.ProtoMessage - if err := proto.Unmarshal(msg.Data, &base); err != nil { - slog.Error("failed to decode binary DataChannel message", "err", err) - return - } - - // Route based on PayloadType - if base.MessageBase != nil && len(base.MessageBase.PayloadType) > 0 { - if callback, ok := ndc.callbacks[base.MessageBase.PayloadType]; ok { - go callback(msg.Data) - } - } - }) - - return ndc -} - -// SendBinary sends a binary message to the data channel -func (ndc *NestriDataChannel) SendBinary(data []byte) error { - return ndc.Send(data) -} - -// RegisterMessageCallback registers a callback for a given binary message type -func (ndc *NestriDataChannel) RegisterMessageCallback(msgType string, callback OnMessageCallback) { - if ndc.callbacks == nil { - ndc.callbacks = make(map[string]OnMessageCallback) - } - ndc.callbacks[msgType] = callback -} - -// UnregisterMessageCallback removes the callback for a given binary message type -func (ndc *NestriDataChannel) UnregisterMessageCallback(msgType string) { - if ndc.callbacks != nil { - delete(ndc.callbacks, msgType) - } -} - -// RegisterOnOpen registers a callback for the data channel opening -func (ndc *NestriDataChannel) RegisterOnOpen(callback func()) { - ndc.OnOpen(callback) -} - -// RegisterOnClose registers a callback for the data channel closing -func (ndc *NestriDataChannel) RegisterOnClose(callback func()) { - ndc.OnClose(callback) -} diff --git a/packages/relay/internal/core/consts.go b/packages/relay/internal/core/consts.go deleted file mode 100644 index 72b59d8b..00000000 --- a/packages/relay/internal/core/consts.go +++ /dev/null @@ -1,13 +0,0 @@ -package core - -import "time" - -// --- Constants --- -const ( - // PubSub Topics - roomStateTopicName = "room-states" - relayMetricsTopicName = "relay-metrics" - - // Timers and Intervals - metricsPublishInterval = 15 * time.Second // How often to publish own metrics -) diff --git a/packages/relay/internal/core/core.go b/packages/relay/internal/core/core.go deleted file mode 100644 index a934d4e8..00000000 --- a/packages/relay/internal/core/core.go +++ /dev/null @@ -1,256 +0,0 @@ -package core - -import ( - "context" - "crypto/ed25519" - "fmt" - "log" - "log/slog" - "net/http" - "os" - "relay/internal/common" - "relay/internal/shared" - - "github.com/libp2p/go-libp2p" - pubsub "github.com/libp2p/go-libp2p-pubsub" - "github.com/libp2p/go-libp2p/core/crypto" - "github.com/libp2p/go-libp2p/core/host" - "github.com/libp2p/go-libp2p/core/network" - "github.com/libp2p/go-libp2p/core/peer" - rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager" - "github.com/libp2p/go-libp2p/p2p/protocol/ping" - "github.com/libp2p/go-libp2p/p2p/security/noise" - p2pquic "github.com/libp2p/go-libp2p/p2p/transport/quic" - "github.com/libp2p/go-libp2p/p2p/transport/quicreuse" - "github.com/libp2p/go-libp2p/p2p/transport/tcp" - webtransport "github.com/libp2p/go-libp2p/p2p/transport/webtransport" - "github.com/multiformats/go-multiaddr" - "github.com/oklog/ulid/v2" - "github.com/pion/webrtc/v4" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" -) - -// -- Variables -- - -var globalRelay *Relay - -// -- Structs -- - -// Relay structure enhanced with metrics and state -type Relay struct { - *PeerInfo - - Host host.Host // libp2p host for peer-to-peer networking - PubSub *pubsub.PubSub // PubSub for state synchronization - PingService *ping.PingService - - // Local - LocalRooms *common.SafeMap[ulid.ULID, *shared.Room] // room ID -> local Room struct (hosted by this relay) - LocalMeshConnections *common.SafeMap[peer.ID, *webrtc.PeerConnection] // peer ID -> PeerConnection (connected to this relay) - - // Protocols - ProtocolRegistry - - // PubSub Topics - pubTopicState *pubsub.Topic // topic for room states - pubTopicRelayMetrics *pubsub.Topic // topic for relay metrics/status -} - -func NewRelay(ctx context.Context, port int, identityKey crypto.PrivKey) (*Relay, error) { - // If metrics are enabled, start the metrics server first - metricsOpts := make([]libp2p.Option, 0) - var rmgr network.ResourceManager - if common.GetFlags().Metrics { - go func() { - slog.Info("Starting prometheus metrics server at '/debug/metrics/prometheus'", "port", common.GetFlags().MetricsPort) - http.Handle("/debug/metrics/prometheus", promhttp.Handler()) - if err := http.ListenAndServe(fmt.Sprintf(":%d", common.GetFlags().MetricsPort), nil); err != nil { - slog.Error("Failed to start metrics server", "err", err) - } - }() - - rcmgr.MustRegisterWith(prometheus.DefaultRegisterer) - - str, err := rcmgr.NewStatsTraceReporter() - if err != nil { - log.Fatal(err) - } - - rmgr, err = rcmgr.NewResourceManager(rcmgr.NewFixedLimiter(rcmgr.DefaultLimits.AutoScale()), rcmgr.WithTraceReporter(str)) - if err != nil { - log.Fatal(err) - } - - metricsOpts = append(metricsOpts, libp2p.ResourceManager(rmgr)) - metricsOpts = append(metricsOpts, libp2p.PrometheusRegisterer(prometheus.DefaultRegisterer)) - } else { - rmgr = nil - } - - listenAddrs := []string{ - fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port), // IPv4 - Raw TCP - fmt.Sprintf("/ip6/::/tcp/%d", port), // IPv6 - Raw TCP - fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic-v1/webtransport", port), // IPv4 - UDP QUIC WebTransport - fmt.Sprintf("/ip6/::/udp/%d/quic-v1/webtransport", port), // IPv6 - UDP QUIC WebTransport - fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic-v1", port), // IPv4 - UDP Raw QUIC - fmt.Sprintf("/ip6/::/udp/%d/quic-v1", port), // IPv6 - UDP Raw QUIC - } - - var muAddrs []multiaddr.Multiaddr - for _, addr := range listenAddrs { - multiAddr, err := multiaddr.NewMultiaddr(addr) - if err != nil { - return nil, fmt.Errorf("failed to parse multiaddr '%s': %w", addr, err) - } - muAddrs = append(muAddrs, multiAddr) - } - - // Initialize libp2p host - p2pHost, err := libp2p.New( - libp2p.ChainOptions(metricsOpts...), - libp2p.Identity(identityKey), - // Enable required transports - libp2p.Transport(tcp.NewTCPTransport), - libp2p.Transport(webtransport.New), - libp2p.Transport(p2pquic.NewTransport), - // Other options - libp2p.ListenAddrs(muAddrs...), - libp2p.Security(noise.ID, noise.New), - libp2p.EnableRelay(), - libp2p.EnableHolePunching(), - libp2p.EnableNATService(), - libp2p.EnableAutoNATv2(), - libp2p.ShareTCPListener(), - libp2p.QUICReuse(quicreuse.NewConnManager), - ) - if err != nil { - return nil, fmt.Errorf("failed to create libp2p host for relay: %w", err) - } - - // Set up pubsub - p2pPubsub, err := pubsub.NewGossipSub(ctx, p2pHost) - if err != nil { - return nil, fmt.Errorf("failed to create pubsub: %w, addrs: %v", err, p2pHost.Addrs()) - } - - // Initialize Ping Service - pingSvc := ping.NewPingService(p2pHost) - - r := &Relay{ - PeerInfo: NewPeerInfo(p2pHost.ID(), p2pHost.Addrs()), - Host: p2pHost, - PubSub: p2pPubsub, - PingService: pingSvc, - LocalRooms: common.NewSafeMap[ulid.ULID, *shared.Room](), - LocalMeshConnections: common.NewSafeMap[peer.ID, *webrtc.PeerConnection](), - } - - // Add network notifier after relay is initialized - p2pHost.Network().Notify(&networkNotifier{relay: r}) - - // Set up PubSub topics and handlers - if err = r.setupPubSub(ctx); err != nil { - err = p2pHost.Close() - if err != nil { - slog.Error("Failed to close host after PubSub setup failure", "err", err) - } - return nil, fmt.Errorf("failed to setup PubSub: %w", err) - } - - // Initialize Protocol Registry - r.ProtocolRegistry = NewProtocolRegistry(r) - - // Start discovery features - if err = startMDNSDiscovery(r); err != nil { - slog.Warn("Failed to initialize mDNS discovery, continuing without..", "error", err) - } - - // Start background tasks - go r.periodicMetricsPublisher(ctx) - - printConnectInstructions(p2pHost) - - return r, nil -} - -func InitRelay(ctx context.Context, ctxCancel context.CancelFunc) (*Relay, error) { - var err error - persistentDir := common.GetFlags().PersistDir - - // Load or generate identity key - var identityKey crypto.PrivKey - var privKey ed25519.PrivateKey - // First check if we need to generate identity - hasIdentity := len(persistentDir) > 0 && common.GetFlags().RegenIdentity == false - if hasIdentity { - _, err = os.Stat(persistentDir + "/identity.key") - if err != nil && !os.IsNotExist(err) { - return nil, fmt.Errorf("failed to check identity key file: %w", err) - } else if os.IsNotExist(err) { - hasIdentity = false - } - } - if !hasIdentity { - // Make sure the persistent directory exists - if err = os.MkdirAll(persistentDir, 0700); err != nil { - return nil, fmt.Errorf("failed to create persistent data directory: %w", err) - } - // Generate - slog.Info("Generating new identity for relay") - privKey, err = common.GenerateED25519Key() - if err != nil { - return nil, fmt.Errorf("failed to generate new identity: %w", err) - } - // Save the key - if err = common.SaveED25519Key(privKey, persistentDir+"/identity.key"); err != nil { - return nil, fmt.Errorf("failed to save identity key: %w", err) - } - slog.Info("New identity generated and saved", "path", persistentDir+"/identity.key") - } else { - slog.Info("Loading existing identity for relay", "path", persistentDir+"/identity.key") - // Load the key - privKey, err = common.LoadED25519Key(persistentDir + "/identity.key") - if err != nil { - return nil, fmt.Errorf("failed to load identity key: %w", err) - } - } - - // Convert to libp2p crypto.PrivKey - identityKey, err = crypto.UnmarshalEd25519PrivateKey(privKey) - if err != nil { - return nil, fmt.Errorf("failed to unmarshal ED25519 private key: %w", err) - } - - globalRelay, err = NewRelay(ctx, common.GetFlags().EndpointPort, identityKey) - if err != nil { - return nil, fmt.Errorf("failed to create relay: %w", err) - } - - if err = common.InitWebRTCAPI(); err != nil { - return nil, err - } - - slog.Info("Relay initialized", "id", globalRelay.ID) - - // Load previous peers on startup - defaultFile := common.GetFlags().PersistDir + "/peerstore.json" - if err = globalRelay.LoadFromFile(defaultFile); err != nil { - slog.Warn("Failed to load previous peer store", "error", err) - } else { - globalRelay.Peers.Range(func(id peer.ID, pi *PeerInfo) bool { - if len(pi.Addrs) <= 0 { - slog.Warn("Peer from peer store has no addresses", "peer", id) - return true - } - - // Connect to first address only - if err = globalRelay.ConnectToPeer(context.Background(), pi.Addrs[0]); err != nil { - slog.Error("Failed to connect to peer from peer store", "peer", id, "error", err) - } - return true - }) - } - - return globalRelay, nil -} diff --git a/packages/relay/internal/core/mdns.go b/packages/relay/internal/core/mdns.go deleted file mode 100644 index 0da3d30f..00000000 --- a/packages/relay/internal/core/mdns.go +++ /dev/null @@ -1,38 +0,0 @@ -package core - -import ( - "context" - "fmt" - "log/slog" - - "github.com/libp2p/go-libp2p/core/peer" - "github.com/libp2p/go-libp2p/p2p/discovery/mdns" -) - -const ( - mdnsDiscoveryRendezvous = "/nestri-relay/mdns-discovery/1.0.0" // Shared string for mDNS discovery -) - -type discoveryNotifee struct { - relay *Relay -} - -func (d *discoveryNotifee) HandlePeerFound(pi peer.AddrInfo) { - if d.relay != nil { - if err := d.relay.connectToPeer(context.Background(), &pi); err != nil { - slog.Error("failed to connect to discovered relay", "peer", pi.ID, "error", err) - } - } -} - -func startMDNSDiscovery(relay *Relay) error { - d := &discoveryNotifee{ - relay: relay, - } - - service := mdns.NewMdnsService(relay.Host, mdnsDiscoveryRendezvous, d) - if err := service.Start(); err != nil { - return fmt.Errorf("failed to start mDNS discovery: %w", err) - } - return nil -} diff --git a/packages/relay/internal/core/metrics.go b/packages/relay/internal/core/metrics.go deleted file mode 100644 index 57928aeb..00000000 --- a/packages/relay/internal/core/metrics.go +++ /dev/null @@ -1,128 +0,0 @@ -package core - -import ( - "context" - "encoding/json" - "fmt" - "log/slog" - "sync" - "time" - - "github.com/libp2p/go-libp2p/core/peer" -) - -// --- Metrics Collection and Publishing --- - -// periodicMetricsPublisher periodically gathers local metrics and publishes them. -func (r *Relay) periodicMetricsPublisher(ctx context.Context) { - ticker := time.NewTicker(metricsPublishInterval) - defer ticker.Stop() - - // Publish immediately on start - if err := r.publishRelayMetrics(ctx); err != nil { - slog.Error("Failed to publish initial relay metrics", "err", err) - } - - for { - select { - case <-ctx.Done(): - slog.Info("Stopping metrics publisher") - return - case <-ticker.C: - if err := r.publishRelayMetrics(ctx); err != nil { - slog.Error("Failed to publish relay metrics", "err", err) - } - } - } -} - -// publishRelayMetrics sends the current relay status to the mesh. -func (r *Relay) publishRelayMetrics(ctx context.Context) error { - if r.pubTopicRelayMetrics == nil { - slog.Warn("Cannot publish relay metrics: topic is nil") - return nil - } - - // Check all peer latencies - r.checkAllPeerLatencies(ctx) - - data, err := json.Marshal(r.PeerInfo) - if err != nil { - return fmt.Errorf("failed to marshal relay status: %w", err) - } - - if pubErr := r.pubTopicRelayMetrics.Publish(ctx, data); pubErr != nil { - // Don't return error on publish failure, just log - slog.Error("Failed to publish relay metrics message", "err", pubErr) - } - return nil -} - -// checkAllPeerLatencies measures latency to all currently connected peers. -func (r *Relay) checkAllPeerLatencies(ctx context.Context) { - var wg sync.WaitGroup - for _, p := range r.Host.Network().Peers() { - if p == r.ID { - continue // Skip self - } - wg.Add(1) - // Run checks concurrently - go func(peerID peer.ID) { - defer wg.Done() - go r.measureLatencyToPeer(ctx, peerID) - }(p) - } - wg.Wait() // Wait for all latency checks to complete -} - -// measureLatencyToPeer pings a specific peer and updates the local latency map. -func (r *Relay) measureLatencyToPeer(ctx context.Context, peerID peer.ID) { - // Check peer status first - if !r.hasConnectedPeer(peerID) { - return - } - - // Create a context for the ping operation - pingCtx, cancel := context.WithCancel(ctx) - defer cancel() - - // Use the PingService instance stored in the Relay struct - if r.PingService == nil { - slog.Error("PingService is nil, cannot measure latency", "peer", peerID) - return - } - resultsCh := r.PingService.Ping(pingCtx, peerID) - - // Wait for the result (or timeout) - select { - case <-pingCtx.Done(): - // Ping timed out - slog.Warn("Latency check canceled", "peer", peerID, "err", pingCtx.Err()) - case result, ok := <-resultsCh: - if !ok { - // Channel closed unexpectedly - slog.Warn("Ping service channel closed unexpectedly", "peer", peerID) - return - } - - // Received ping result - if result.Error != nil { - slog.Warn("Latency check failed, removing peer from local peers map", "peer", peerID, "err", result.Error) - // Remove from MeshPeers if ping failed - if r.Peers.Has(peerID) { - r.Peers.Delete(peerID) - } - return - } - - // Ping successful, update latency - latency := result.RTT - // Ensure latency is not zero if successful, assign a minimal value if so. - // Sometimes RTT can be reported as 0 for very fast local connections. - if latency <= 0 { - latency = 1 * time.Microsecond - } - - r.PeerInfo.Latencies.Set(peerID, latency) - } -} diff --git a/packages/relay/internal/core/p2p.go b/packages/relay/internal/core/p2p.go deleted file mode 100644 index 01258676..00000000 --- a/packages/relay/internal/core/p2p.go +++ /dev/null @@ -1,123 +0,0 @@ -package core - -import ( - "context" - "errors" - "fmt" - "log/slog" - "time" - - "github.com/libp2p/go-libp2p/core/host" - "github.com/libp2p/go-libp2p/core/network" - "github.com/libp2p/go-libp2p/core/peer" - "github.com/multiformats/go-multiaddr" -) - -// --- Structs --- - -// networkNotifier logs connection events and updates relay state -type networkNotifier struct { - relay *Relay -} - -// Connected is called when a connection is established -func (n *networkNotifier) Connected(net network.Network, conn network.Conn) { - if n.relay != nil { - n.relay.onPeerConnected(conn.RemotePeer()) - } -} - -// Disconnected is called when a connection is terminated -func (n *networkNotifier) Disconnected(net network.Network, conn network.Conn) { - // Update the status of the disconnected peer - if n.relay != nil { - n.relay.onPeerDisconnected(conn.RemotePeer()) - } -} - -// Listen is called when the node starts listening on an address -func (n *networkNotifier) Listen(net network.Network, addr multiaddr.Multiaddr) {} - -// ListenClose is called when the node stops listening on an address -func (n *networkNotifier) ListenClose(net network.Network, addr multiaddr.Multiaddr) {} - -// --- PubSub Setup --- - -// setupPubSub initializes PubSub topics and subscriptions. -func (r *Relay) setupPubSub(ctx context.Context) error { - var err error - - // Room State Topic - r.pubTopicState, err = r.PubSub.Join(roomStateTopicName) - if err != nil { - return fmt.Errorf("failed to join room state topic '%s': %w", roomStateTopicName, err) - } - stateSub, err := r.pubTopicState.Subscribe() - if err != nil { - return fmt.Errorf("failed to subscribe to room state topic '%s': %w", roomStateTopicName, err) - } - go r.handleRoomStateMessages(ctx, stateSub) // Handler in relay_state.go - - // Relay Metrics Topic - r.pubTopicRelayMetrics, err = r.PubSub.Join(relayMetricsTopicName) - if err != nil { - return fmt.Errorf("failed to join relay metrics topic '%s': %w", relayMetricsTopicName, err) - } - metricsSub, err := r.pubTopicRelayMetrics.Subscribe() - if err != nil { - return fmt.Errorf("failed to subscribe to relay metrics topic '%s': %w", relayMetricsTopicName, err) - } - go r.handleRelayMetricsMessages(ctx, metricsSub) // Handler in relay_state.go - - slog.Info("PubSub topics joined and subscriptions started") - return nil -} - -// --- Connection Management --- - -// connectToPeer is internal method to connect to a peer using multiaddresses -func (r *Relay) connectToPeer(ctx context.Context, peerInfo *peer.AddrInfo) error { - if peerInfo.ID == r.ID { - return errors.New("cannot connect to self") - } - - // Use a timeout for the connection attempt - connectCtx, cancel := context.WithTimeout(ctx, 15*time.Second) // 15s timeout - defer cancel() - - slog.Info("Attempting to connect to peer", "peer", peerInfo.ID, "addrs", peerInfo.Addrs) - if err := r.Host.Connect(connectCtx, *peerInfo); err != nil { - return fmt.Errorf("failed to connect to %s: %w", peerInfo.ID, err) - } - - slog.Info("Successfully connected to peer", "peer", peerInfo.ID, "addrs", peerInfo.Addrs) - return nil -} - -// ConnectToPeer connects to another peer by its multiaddress. -func (r *Relay) ConnectToPeer(ctx context.Context, addr multiaddr.Multiaddr) error { - peerInfo, err := peer.AddrInfoFromP2pAddr(addr) - if err != nil { - return fmt.Errorf("failed to extract peer info: %w", err) - } - - return r.connectToPeer(ctx, peerInfo) -} - -// printConnectInstructions logs the multiaddresses for connecting to this relay. -func printConnectInstructions(p2pHost host.Host) { - peerInfo := peer.AddrInfo{ - ID: p2pHost.ID(), - Addrs: p2pHost.Addrs(), - } - addrs, err := peer.AddrInfoToP2pAddrs(&peerInfo) - if err != nil { - slog.Error("Failed to convert peer info to addresses", "err", err) - return - } - - slog.Info("Mesh connection addresses:") - for _, addr := range addrs { - slog.Info(fmt.Sprintf("> %s", addr.String())) - } -} diff --git a/packages/relay/internal/core/peer.go b/packages/relay/internal/core/peer.go deleted file mode 100644 index 2f8ce1d6..00000000 --- a/packages/relay/internal/core/peer.go +++ /dev/null @@ -1,77 +0,0 @@ -package core - -import ( - "errors" - "log/slog" - "os" - "relay/internal/common" - "relay/internal/shared" - "time" - - "github.com/libp2p/go-libp2p/core/peer" - "github.com/multiformats/go-multiaddr" -) - -// PeerInfo contains information of a peer, in light transmit-friendly format -type PeerInfo struct { - ID peer.ID - Addrs []multiaddr.Multiaddr // Addresses of this peer - Peers *common.SafeMap[peer.ID, *PeerInfo] // Peers connected to this peer - Latencies *common.SafeMap[peer.ID, time.Duration] // Latencies to other peers from this peer - Rooms *common.SafeMap[string, shared.RoomInfo] // Rooms this peer is part of or owner of -} - -func NewPeerInfo(id peer.ID, addrs []multiaddr.Multiaddr) *PeerInfo { - return &PeerInfo{ - ID: id, - Addrs: addrs, - Peers: common.NewSafeMap[peer.ID, *PeerInfo](), - Latencies: common.NewSafeMap[peer.ID, time.Duration](), - Rooms: common.NewSafeMap[string, shared.RoomInfo](), - } -} - -// SaveToFile saves the peer store to a JSON file in persistent path -func (pi *PeerInfo) SaveToFile(filePath string) error { - if len(filePath) <= 0 { - return errors.New("filepath is not set") - } - - // Marshal the peer store to JSON array (we don't need to store IDs..) - data, err := pi.Peers.MarshalJSON() - if err != nil { - return errors.New("failed to marshal peer store data: " + err.Error()) - } - - // Save the data to a file - if err = os.WriteFile(filePath, data, 0644); err != nil { - return errors.New("failed to save peer store to file: " + err.Error()) - } - - slog.Info("PeerStore saved to file", "path", filePath) - return nil -} - -// LoadFromFile loads the peer store from a JSON file in persistent path -func (pi *PeerInfo) LoadFromFile(filePath string) error { - if len(filePath) <= 0 { - return errors.New("filepath is not set") - } - - data, err := os.ReadFile(filePath) - if err != nil { - if os.IsNotExist(err) { - slog.Info("PeerStore file does not exist, starting with empty store") - return nil // No peers to load - } - return errors.New("failed to read peer store file: " + err.Error()) - } - - // Unmarshal the JSON data into the peer store - if err = pi.Peers.UnmarshalJSON(data); err != nil { - return errors.New("failed to unmarshal peer store data: " + err.Error()) - } - - slog.Info("PeerStore loaded from file", "path", filePath) - return nil -} diff --git a/packages/relay/internal/core/protocol_stream.go b/packages/relay/internal/core/protocol_stream.go deleted file mode 100644 index 3b1d06b4..00000000 --- a/packages/relay/internal/core/protocol_stream.go +++ /dev/null @@ -1,672 +0,0 @@ -package core - -import ( - "bufio" - "context" - "errors" - "fmt" - "io" - "log/slog" - "relay/internal/common" - "relay/internal/connections" - "relay/internal/shared" - - gen "relay/internal/proto" - - "google.golang.org/protobuf/proto" - - "github.com/libp2p/go-libp2p/core/network" - "github.com/libp2p/go-libp2p/core/peer" - "github.com/pion/rtp" - "github.com/pion/webrtc/v4" -) - -// TODO:s -// TODO: When disconnecting with stream open, causes crash on requester -// TODO: Need to trigger stream request if remote room is online and there are participants in local waiting -// TODO: Cleanup local room state when stream is closed upstream - -// --- Protocol IDs --- -const ( - protocolStreamRequest = "/nestri-relay/stream-request/1.0.0" // For requesting a stream from relay - protocolStreamPush = "/nestri-relay/stream-push/1.0.0" // For pushing a stream to relay -) - -// --- Protocol Types --- - -// StreamConnection is a connection between two relays for stream protocol -type StreamConnection struct { - pc *webrtc.PeerConnection - ndc *connections.NestriDataChannel -} - -// StreamProtocol deals with meshed stream forwarding -type StreamProtocol struct { - relay *Relay - servedConns *common.SafeMap[string, *common.SafeMap[peer.ID, *StreamConnection]] // room name -> (peer ID -> StreamConnection) (for served streams) - incomingConns *common.SafeMap[string, *StreamConnection] // room name -> StreamConnection (for incoming pushed streams) - requestedConns *common.SafeMap[string, *StreamConnection] // room name -> StreamConnection (for requested streams from other relays) -} - -func NewStreamProtocol(relay *Relay) *StreamProtocol { - protocol := &StreamProtocol{ - relay: relay, - servedConns: common.NewSafeMap[string, *common.SafeMap[peer.ID, *StreamConnection]](), - incomingConns: common.NewSafeMap[string, *StreamConnection](), - requestedConns: common.NewSafeMap[string, *StreamConnection](), - } - - protocol.relay.Host.SetStreamHandler(protocolStreamRequest, protocol.handleStreamRequest) - protocol.relay.Host.SetStreamHandler(protocolStreamPush, protocol.handleStreamPush) - - return protocol -} - -// --- Protocol Stream Handlers --- - -// handleStreamRequest manages a request from another relay for a stream hosted locally -func (sp *StreamProtocol) handleStreamRequest(stream network.Stream) { - brw := bufio.NewReadWriter(bufio.NewReader(stream), bufio.NewWriter(stream)) - safeBRW := common.NewSafeBufioRW(brw) - - var currentRoomName string // Track the current room for this stream - iceHelper := common.NewICEHelper(nil) - for { - var msgWrapper gen.ProtoMessage - err := safeBRW.ReceiveProto(&msgWrapper) - if err != nil { - if errors.Is(err, io.EOF) || errors.Is(err, network.ErrReset) { - slog.Debug("Stream request connection closed by peer", "peer", stream.Conn().RemotePeer()) - return - } - - slog.Error("Failed to receive data", "err", err) - _ = stream.Reset() - - return - } - - if msgWrapper.MessageBase == nil { - slog.Error("No MessageBase in stream request") - _ = stream.Reset() - return - } - - switch msgWrapper.MessageBase.PayloadType { - case "request-stream-room": - reqMsg := msgWrapper.GetClientRequestRoomStream() - if reqMsg != nil { - currentRoomName = reqMsg.RoomName - - // Generate session ID if not provided (first connection) - sessionID := reqMsg.SessionId - if sessionID == "" { - ulid, err := common.NewULID() - if err != nil { - slog.Error("Failed to generate session ID", "err", err) - continue - } - sessionID = ulid.String() - } - - slog.Info("Client session requested room stream", "session", sessionID, "room", reqMsg.RoomName) - - // Send session ID back to client - sesMsg, err := common.CreateMessage( - &gen.ProtoClientRequestRoomStream{SessionId: sessionID, RoomName: reqMsg.RoomName}, - "session-assigned", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - continue - } - if err = safeBRW.SendProto(sesMsg); err != nil { - slog.Error("Failed to send session assignment", "err", err) - } - - slog.Info("Received stream request for room", "room", reqMsg.RoomName) - - room := sp.relay.GetRoomByName(reqMsg.RoomName) - if room == nil || !room.IsOnline() || room.OwnerID != sp.relay.ID { - // TODO: Allow forward requests to other relays from here? - slog.Debug("Cannot provide stream for nil, offline or non-owned room", "room", reqMsg.RoomName, "is_online", room != nil && room.IsOnline(), "is_owner", room != nil && room.OwnerID == sp.relay.ID) - // Respond with "request-stream-offline" message with room name - // TODO: Store the peer and send "online" message when the room comes online - rawMsg, err := common.CreateMessage( - &gen.ProtoRaw{ - Data: reqMsg.RoomName, - }, - "request-stream-offline", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - continue - } - if err = safeBRW.SendProto(rawMsg); err != nil { - slog.Error("Failed to send request stream offline message", "room", reqMsg.RoomName, "err", err) - } - continue - } - - pc, err := common.CreatePeerConnection(func() { - slog.Info("PeerConnection closed for requested stream", "room", reqMsg.RoomName) - // Cleanup the stream connection - if roomMap, ok := sp.servedConns.Get(reqMsg.RoomName); ok { - roomMap.Delete(stream.Conn().RemotePeer()) - // If the room map is empty, delete it - if roomMap.Len() == 0 { - sp.servedConns.Delete(reqMsg.RoomName) - } - } - }) - if err != nil { - slog.Error("Failed to create PeerConnection for requested stream", "room", reqMsg.RoomName, "err", err) - continue - } - - // Create participant for this viewer - participant, err := shared.NewParticipant( - sessionID, - stream.Conn().RemotePeer(), - ) - if err != nil { - slog.Error("Failed to create participant", "room", reqMsg.RoomName, "err", err) - continue - } - - // Assign peer connection - participant.PeerConnection = pc - iceHelper.SetPeerConnection(pc) - - // Add audio/video tracks - { - localTrack, err := webrtc.NewTrackLocalStaticRTP( - room.AudioCodec, - "participant-"+participant.ID.String(), - "participant-"+participant.ID.String()+"-audio", - ) - if err != nil { - slog.Error("Failed to create track for stream request", "err", err) - return - } - participant.SetTrack(webrtc.RTPCodecTypeAudio, localTrack) - slog.Debug("Set audio track for requested stream", "room", room.Name) - } - { - localTrack, err := webrtc.NewTrackLocalStaticRTP( - room.VideoCodec, - "participant-"+participant.ID.String(), - "participant-"+participant.ID.String()+"-video", - ) - if err != nil { - slog.Error("Failed to create track for stream request", "err", err) - return - } - participant.SetTrack(webrtc.RTPCodecTypeVideo, localTrack) - slog.Debug("Set video track for requested stream", "room", room.Name) - } - - // Cleanup on disconnect - cleanupParticipantID := participant.ID - pc.OnConnectionStateChange(func(state webrtc.PeerConnectionState) { - if state == webrtc.PeerConnectionStateClosed || - state == webrtc.PeerConnectionStateFailed || - state == webrtc.PeerConnectionStateDisconnected { - slog.Info("Participant disconnected from room", "room", reqMsg.RoomName, "participant", cleanupParticipantID) - room.RemoveParticipantByID(cleanupParticipantID) - participant.Close() - } else if state == webrtc.PeerConnectionStateConnected { - // Add participant to room when connection is established - room.AddParticipant(participant) - } - }) - - // DataChannel setup - settingOrdered := true - settingMaxRetransmits := uint16(2) - dc, err := pc.CreateDataChannel("relay-data", &webrtc.DataChannelInit{ - Ordered: &settingOrdered, - MaxRetransmits: &settingMaxRetransmits, - }) - if err != nil { - slog.Error("Failed to create DataChannel for requested stream", "room", reqMsg.RoomName, "err", err) - continue - } - ndc := connections.NewNestriDataChannel(dc) - - ndc.RegisterOnOpen(func() { - slog.Debug("Relay DataChannel opened for requested stream", "room", reqMsg.RoomName) - }) - ndc.RegisterOnClose(func() { - slog.Debug("Relay DataChannel closed for requested stream", "room", reqMsg.RoomName) - }) - ndc.RegisterMessageCallback("input", func(data []byte) { - if room.DataChannel != nil { - if err = room.DataChannel.SendBinary(data); err != nil { - slog.Error("Failed to forward input message from mesh to upstream room", "room", reqMsg.RoomName, "err", err) - } - } - }) - // Track controller input separately - ndc.RegisterMessageCallback("controllerInput", func(data []byte) { - // Parse the message to track controller slots for client sessions - var controllerMsgWrapper gen.ProtoMessage - if err = proto.Unmarshal(data, &controllerMsgWrapper); err != nil { - slog.Error("Failed to unmarshal controller input", "err", err) - } - - // Forward to upstream room - if room.DataChannel != nil { - if err = room.DataChannel.SendBinary(data); err != nil { - slog.Error("Failed to forward controller input from mesh to upstream room", "room", reqMsg.RoomName, "err", err) - } - } - }) - - // ICE Candidate handling - pc.OnICECandidate(func(candidate *webrtc.ICECandidate) { - if candidate == nil { - return - } - - candInit := candidate.ToJSON() - var sdpMLineIndex *uint32 - if candInit.SDPMLineIndex != nil { - idx := uint32(*candInit.SDPMLineIndex) - sdpMLineIndex = &idx - } - iceMsg, err := common.CreateMessage( - &gen.ProtoICE{ - Candidate: &gen.RTCIceCandidateInit{ - Candidate: candInit.Candidate, - SdpMLineIndex: sdpMLineIndex, - SdpMid: candInit.SDPMid, - }, - }, - "ice-candidate", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - return - } - if err = safeBRW.SendProto(iceMsg); err != nil { - slog.Error("Failed to send ICE candidate message for requested stream", "room", reqMsg.RoomName, "err", err) - return - } - }) - - // Create offer - offer, err := pc.CreateOffer(nil) - if err != nil { - slog.Error("Failed to create offer for requested stream", "room", reqMsg.RoomName, "err", err) - continue - } - if err = pc.SetLocalDescription(offer); err != nil { - slog.Error("Failed to set local description for requested stream", "room", reqMsg.RoomName, "err", err) - continue - } - offerMsg, err := common.CreateMessage( - &gen.ProtoSDP{ - Sdp: &gen.RTCSessionDescriptionInit{ - Sdp: offer.SDP, - Type: offer.Type.String(), - }, - }, - "offer", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - continue - } - if err = safeBRW.SendProto(offerMsg); err != nil { - slog.Error("Failed to send offer for requested stream", "room", reqMsg.RoomName, "err", err) - continue - } - - // Store the connection - roomMap, ok := sp.servedConns.Get(reqMsg.RoomName) - if !ok { - roomMap = common.NewSafeMap[peer.ID, *StreamConnection]() - sp.servedConns.Set(reqMsg.RoomName, roomMap) - } - roomMap.Set(stream.Conn().RemotePeer(), &StreamConnection{ - pc: pc, - ndc: ndc, - }) - - slog.Debug("Sent offer for requested stream") - } else { - slog.Error("Could not get ClientRequestRoomStream for stream request") - } - case "ice-candidate": - iceMsg := msgWrapper.GetIce() - if iceMsg != nil { - cand := webrtc.ICECandidateInit{ - Candidate: iceMsg.Candidate.Candidate, - SDPMid: iceMsg.Candidate.SdpMid, - UsernameFragment: iceMsg.Candidate.UsernameFragment, - } - if iceMsg.Candidate.SdpMLineIndex != nil { - smollified := uint16(*iceMsg.Candidate.SdpMLineIndex) - cand.SDPMLineIndex = &smollified - } - iceHelper.AddCandidate(cand) - } else { - slog.Error("Could not GetIce from ice-candidate") - } - case "answer": - answerMsg := msgWrapper.GetSdp() - if answerMsg != nil { - ansSdp := webrtc.SessionDescription{ - SDP: answerMsg.Sdp.Sdp, - Type: webrtc.NewSDPType(answerMsg.Sdp.Type), - } - // Use currentRoomName to get the connection from nested map - if len(currentRoomName) > 0 { - if roomMap, ok := sp.servedConns.Get(currentRoomName); ok { - if conn, ok := roomMap.Get(stream.Conn().RemotePeer()); ok { - if err = conn.pc.SetRemoteDescription(ansSdp); err != nil { - slog.Error("Failed to set remote description for answer", "err", err) - continue - } - slog.Debug("Set remote description for answer") - // Flush held candidates now if missed before (race-condition) - iceHelper.FlushHeldCandidates() - } else { - slog.Warn("Received answer without active PeerConnection") - } - } - } else { - slog.Warn("Received answer without active PeerConnection") - } - } else { - slog.Warn("Could not GetSdp from answer") - } - } - } -} - -// handleStreamPush manages a stream push from a node (nestri-server) -func (sp *StreamProtocol) handleStreamPush(stream network.Stream) { - brw := bufio.NewReadWriter(bufio.NewReader(stream), bufio.NewWriter(stream)) - safeBRW := common.NewSafeBufioRW(brw) - - var room *shared.Room - iceHelper := common.NewICEHelper(nil) - for { - var msgWrapper gen.ProtoMessage - err := safeBRW.ReceiveProto(&msgWrapper) - if err != nil { - if errors.Is(err, io.EOF) || errors.Is(err, network.ErrReset) { - slog.Debug("Stream push connection closed by peer", "peer", stream.Conn().RemotePeer(), "error", err) - if room != nil { - room.Close() - sp.incomingConns.Delete(room.Name) - } - return - } - - slog.Error("Failed to receive data for stream push", "err", err) - _ = stream.Reset() - if room != nil { - room.Close() - sp.incomingConns.Delete(room.Name) - } - return - } - - if msgWrapper.MessageBase == nil { - slog.Error("No MessageBase in stream push") - continue - } - - switch msgWrapper.MessageBase.PayloadType { - case "push-stream-room": - pushMsg := msgWrapper.GetServerPushStream() - if pushMsg != nil { - slog.Info("Received stream push request for room", "room", pushMsg.RoomName) - - room = sp.relay.GetRoomByName(pushMsg.RoomName) - if room != nil { - if room.OwnerID != sp.relay.ID { - slog.Error("Cannot push a stream to non-owned room", "room", room.Name, "owner_id", room.OwnerID) - continue - } - if room.IsOnline() { - slog.Error("Cannot push a stream to already online room", "room", room.Name) - continue - } - } else { - // Create a new room if it doesn't exist - room = sp.relay.CreateRoom(pushMsg.RoomName) - } - - // Respond with an OK with the room name - resMsg, err := common.CreateMessage( - &gen.ProtoServerPushStream{ - RoomName: pushMsg.RoomName, - }, - "push-stream-ok", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - continue - } - if err = safeBRW.SendProto(resMsg); err != nil { - slog.Error("Failed to send push stream OK response", "room", room.Name, "err", err) - continue - } - } else { - slog.Error("Failed to GetServerPushStream in push-stream-room") - } - case "ice-candidate": - iceMsg := msgWrapper.GetIce() - if iceMsg != nil { - smollified := uint16(*iceMsg.Candidate.SdpMLineIndex) - cand := webrtc.ICECandidateInit{ - Candidate: iceMsg.Candidate.Candidate, - SDPMid: iceMsg.Candidate.SdpMid, - SDPMLineIndex: &smollified, - UsernameFragment: iceMsg.Candidate.UsernameFragment, - } - iceHelper.AddCandidate(cand) - } else { - slog.Error("Failed to GetIce in pushed stream ice-candidate") - } - case "offer": - // Make sure we have room set to push to (set by "push-stream-room") - if room == nil { - slog.Error("Received offer without room set for stream push") - continue - } - - offerMsg := msgWrapper.GetSdp() - if offerMsg != nil { - offSdp := webrtc.SessionDescription{ - SDP: offerMsg.Sdp.Sdp, - Type: webrtc.NewSDPType(offerMsg.Sdp.Type), - } - // Create PeerConnection for the incoming stream - pc, err := common.CreatePeerConnection(func() { - slog.Info("PeerConnection closed for pushed stream", "room", room.Name) - // Cleanup the stream connection - if ok := sp.incomingConns.Has(room.Name); ok { - sp.incomingConns.Delete(room.Name) - } - }) - if err != nil { - slog.Error("Failed to create PeerConnection for pushed stream", "room", room.Name, "err", err) - continue - } - - // Assign room peer connection - room.PeerConnection = pc - iceHelper.SetPeerConnection(pc) - - pc.OnDataChannel(func(dc *webrtc.DataChannel) { - // TODO: Is this the best way to handle DataChannel? Should we just use the map directly? - room.DataChannel = connections.NewNestriDataChannel(dc) - room.DataChannel.RegisterOnOpen(func() { - slog.Debug("DataChannel opened for pushed stream", "room", room.Name) - }) - room.DataChannel.RegisterOnClose(func() { - slog.Debug("DataChannel closed for pushed stream", "room", room.Name) - }) - // Handle controller feedback reverse-flow (like rumble events coming from game to client) - room.DataChannel.RegisterMessageCallback("controllerInput", func(data []byte) { - // Forward controller input to all viewers - if roomMap, ok := sp.servedConns.Get(room.Name); ok { - roomMap.Range(func(peerID peer.ID, conn *StreamConnection) bool { - if conn.ndc != nil { - if err = conn.ndc.SendBinary(data); err != nil { - if errors.Is(err, io.ErrClosedPipe) { - slog.Warn("Failed to forward controller input to viewer, treating as disconnected", "err", err) - sp.relay.onPeerDisconnected(peerID) - } else { - slog.Error("Failed to forward controller input from pushed stream to viewer", "room", room.Name, "peer", peerID, "err", err) - } - } - } - return true - }) - } - }) - - // Set the DataChannel in the incomingConns map - if conn, ok := sp.incomingConns.Get(room.Name); ok { - conn.ndc = room.DataChannel - } else { - sp.incomingConns.Set(room.Name, &StreamConnection{ - pc: pc, - ndc: room.DataChannel, - }) - } - }) - - pc.OnICECandidate(func(candidate *webrtc.ICECandidate) { - if candidate == nil { - return - } - - candInit := candidate.ToJSON() - biggified := uint32(*candInit.SDPMLineIndex) - iceMsg, err := common.CreateMessage( - &gen.ProtoICE{ - Candidate: &gen.RTCIceCandidateInit{ - Candidate: candInit.Candidate, - SdpMLineIndex: &biggified, - SdpMid: candInit.SDPMid, - }, - }, - "ice-candidate", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - return - } - if err = safeBRW.SendProto(iceMsg); err != nil { - slog.Error("Failed to send ICE candidate message for pushed stream", "room", room.Name, "err", err) - return - } - }) - - pc.OnTrack(func(remoteTrack *webrtc.TrackRemote, receiver *webrtc.RTPReceiver) { - // Prepare PlayoutDelayExtension so we don't need to recreate it for each packet - playoutExt := &rtp.PlayoutDelayExtension{ - MinDelay: 0, - MaxDelay: 0, - } - playoutPayload, err := playoutExt.Marshal() - if err != nil { - slog.Error("Failed to marshal PlayoutDelayExtension for room", "room", room.Name, "err", err) - return - } - - if remoteTrack.Kind() == webrtc.RTPCodecTypeAudio { - room.AudioCodec = remoteTrack.Codec().RTPCodecCapability - } else if remoteTrack.Kind() == webrtc.RTPCodecTypeVideo { - room.VideoCodec = remoteTrack.Codec().RTPCodecCapability - } - - for { - rtpPacket, _, err := remoteTrack.ReadRTP() - if err != nil { - if !errors.Is(err, io.EOF) { - slog.Error("Failed to read RTP from remote track for room", "room", room.Name, "err", err) - } - break - } - - // Use PlayoutDelayExtension for low latency, if set for this track kind - if extID, ok := common.GetExtension(remoteTrack.Kind(), common.ExtensionPlayoutDelay); ok { - if err = rtpPacket.SetExtension(extID, playoutPayload); err != nil { - slog.Error("Failed to set PlayoutDelayExtension for room", "room", room.Name, "err", err) - continue - } - } - - // Broadcast - room.BroadcastPacket(remoteTrack.Kind(), rtpPacket) - } - - slog.Debug("Track closed for room", "room", room.Name, "track_kind", remoteTrack.Kind().String()) - }) - - // Set the remote description - if err = pc.SetRemoteDescription(offSdp); err != nil { - slog.Error("Failed to set remote description for pushed stream", "room", room.Name, "err", err) - continue - } - slog.Debug("Set remote description for pushed stream", "room", room.Name) - // Flush candidates now if they weren't before (race-condition) - iceHelper.FlushHeldCandidates() - - // Create an answer - answer, err := pc.CreateAnswer(nil) - if err != nil { - slog.Error("Failed to create answer for pushed stream", "room", room.Name, "err", err) - continue - } - if err = pc.SetLocalDescription(answer); err != nil { - slog.Error("Failed to set local description for pushed stream", "room", room.Name, "err", err) - continue - } - answerMsg, err := common.CreateMessage( - &gen.ProtoSDP{ - Sdp: &gen.RTCSessionDescriptionInit{ - Sdp: answer.SDP, - Type: answer.Type.String(), - }, - }, - "answer", nil, - ) - if err != nil { - slog.Error("Failed to create proto message", "err", err) - continue - } - if err = safeBRW.SendProto(answerMsg); err != nil { - slog.Error("Failed to send answer for pushed stream", "room", room.Name, "err", err) - } - - // Store the connection - sp.incomingConns.Set(room.Name, &StreamConnection{ - pc: pc, - ndc: room.DataChannel, // if it exists, if not it will be set later - }) - slog.Debug("Sent answer for pushed stream", "room", room.Name) - } - } - } -} - -// --- Public Usable Methods --- - -// RequestStream sends a request to get room stream from another relay -func (sp *StreamProtocol) RequestStream(ctx context.Context, room *shared.Room, peerID peer.ID) error { - _, err := sp.relay.Host.NewStream(ctx, peerID, protocolStreamRequest) - if err != nil { - return fmt.Errorf("failed to create stream: %w", err) - } - - return nil /* TODO: This? */ -} diff --git a/packages/relay/internal/core/protocols.go b/packages/relay/internal/core/protocols.go deleted file mode 100644 index afae3ddf..00000000 --- a/packages/relay/internal/core/protocols.go +++ /dev/null @@ -1,13 +0,0 @@ -package core - -// ProtocolRegistry is a type holding all protocols to split away the bloat -type ProtocolRegistry struct { - StreamProtocol *StreamProtocol -} - -// NewProtocolRegistry initializes and returns a new protocol registry -func NewProtocolRegistry(relay *Relay) ProtocolRegistry { - return ProtocolRegistry{ - StreamProtocol: NewStreamProtocol(relay), - } -} diff --git a/packages/relay/internal/core/room.go b/packages/relay/internal/core/room.go deleted file mode 100644 index c4a5b2a9..00000000 --- a/packages/relay/internal/core/room.go +++ /dev/null @@ -1,108 +0,0 @@ -package core - -import ( - "context" - "encoding/json" - "fmt" - "log/slog" - "relay/internal/shared" - - "github.com/libp2p/go-libp2p/core/network" - "github.com/oklog/ulid/v2" -) - -// --- Room Management --- - -// GetRoomByID retrieves a local Room struct by its ULID -func (r *Relay) GetRoomByID(id ulid.ULID) *shared.Room { - if room, ok := r.LocalRooms.Get(id); ok { - return room - } - return nil -} - -// GetRoomByName retrieves a local Room struct by its name -func (r *Relay) GetRoomByName(name string) *shared.Room { - for _, room := range r.LocalRooms.Copy() { - if room.Name == name { - return room - } - } - return nil -} - -// CreateRoom creates a new local Room struct with the given name -func (r *Relay) CreateRoom(name string) *shared.Room { - roomID := ulid.Make() - room := shared.NewRoom(name, roomID, r.ID) - r.LocalRooms.Set(room.ID, room) - slog.Debug("Created new local room", "room", name, "id", room.ID) - return room -} - -// DeleteRoomIfEmpty checks if a local room struct is inactive and can be removed -func (r *Relay) DeleteRoomIfEmpty(room *shared.Room) { - if room == nil { - return - } - if len(room.Participants) <= 0 && r.LocalRooms.Has(room.ID) { - slog.Debug("Deleting empty room without participants", "room", room.Name) - r.LocalRooms.Delete(room.ID) - err := room.PeerConnection.Close() - if err != nil { - slog.Error("Failed to close Room PeerConnection", "room", room.Name, "err", err) - } - } -} - -// GetRemoteRoomByName returns room from mesh by name -func (r *Relay) GetRemoteRoomByName(roomName string) *shared.RoomInfo { - for _, room := range r.Rooms.Copy() { - if room.Name == roomName && room.OwnerID != r.ID { - // Make sure connection is alive - if r.Host.Network().Connectedness(room.OwnerID) == network.Connected { - return &room - } - - slog.Debug("Removing stale peer, owns a room without connection", "room", roomName, "peer", room.OwnerID) - r.onPeerDisconnected(room.OwnerID) - } - } - return nil -} - -// --- State Publishing --- - -// publishRoomStates publishes the state of all rooms currently owned by *this* relay -func (r *Relay) publishRoomStates(ctx context.Context) error { - if r.pubTopicState == nil { - slog.Warn("Cannot publish room states: topic is nil") - return nil - } - - var statesToPublish []shared.RoomInfo - r.LocalRooms.Range(func(id ulid.ULID, room *shared.Room) bool { - // Only publish state for rooms owned by this relay - if room.OwnerID == r.ID { - statesToPublish = append(statesToPublish, shared.RoomInfo{ - ID: room.ID, - Name: room.Name, - OwnerID: r.ID, - }) - } - return true // Continue iteration - }) - - if len(statesToPublish) == 0 { - return nil - } - - data, err := json.Marshal(statesToPublish) - if err != nil { - return fmt.Errorf("failed to marshal local room states: %w", err) - } - if pubErr := r.pubTopicState.Publish(ctx, data); pubErr != nil { - slog.Error("Failed to publish room states message", "err", pubErr) - } - return nil -} diff --git a/packages/relay/internal/core/state.go b/packages/relay/internal/core/state.go deleted file mode 100644 index 46bfa69b..00000000 --- a/packages/relay/internal/core/state.go +++ /dev/null @@ -1,168 +0,0 @@ -package core - -import ( - "context" - "encoding/json" - "errors" - "log/slog" - "relay/internal/shared" - "time" - - pubsub "github.com/libp2p/go-libp2p-pubsub" - "github.com/libp2p/go-libp2p/core/network" - "github.com/libp2p/go-libp2p/core/peer" -) - -// --- PubSub Message Handlers --- - -// handleRoomStateMessages processes incoming room state updates from peers. -func (r *Relay) handleRoomStateMessages(ctx context.Context, sub *pubsub.Subscription) { - slog.Debug("Starting room state message handler...") - for { - select { - case <-ctx.Done(): - slog.Info("Stopping room state message handler") - return - default: - msg, err := sub.Next(ctx) - if err != nil { - if errors.Is(err, context.Canceled) || errors.Is(err, pubsub.ErrSubscriptionCancelled) || errors.Is(err, context.DeadlineExceeded) { - slog.Info("Room state subscription ended", "err", err) - return - } - slog.Error("Error receiving room state message", "err", err) - time.Sleep(1 * time.Second) - continue - } - if msg.GetFrom() == r.Host.ID() { - continue - } - - var states []shared.RoomInfo - if err := json.Unmarshal(msg.Data, &states); err != nil { - slog.Error("Failed to unmarshal room states", "from", msg.GetFrom(), "data_len", len(msg.Data), "err", err) - continue - } - - r.updateMeshRoomStates(msg.GetFrom(), states) - } - } -} - -// handleRelayMetricsMessages processes incoming status updates from peers. -func (r *Relay) handleRelayMetricsMessages(ctx context.Context, sub *pubsub.Subscription) { - slog.Debug("Starting relay metrics message handler...") - for { - select { - case <-ctx.Done(): - slog.Info("Stopping relay metrics message handler") - return - default: - msg, err := sub.Next(ctx) - if err != nil { - if errors.Is(err, context.Canceled) || errors.Is(err, pubsub.ErrSubscriptionCancelled) || errors.Is(err, context.DeadlineExceeded) { - slog.Info("Relay metrics subscription ended", "err", err) - return - } - slog.Error("Error receiving relay metrics message", "err", err) - time.Sleep(1 * time.Second) - continue - } - if msg.GetFrom() == r.Host.ID() { - continue - } - - var info PeerInfo - if err = json.Unmarshal(msg.Data, &info); err != nil { - slog.Error("Failed to unmarshal relay status", "from", msg.GetFrom(), "data_len", len(msg.Data), "err", err) - continue - } - if info.ID != msg.GetFrom() { - slog.Error("Peer ID mismatch in relay status", "expected", info.ID, "actual", msg.GetFrom()) - continue - } - r.onPeerStatus(info) - } - } -} - -// --- State Check Functions --- -// hasConnectedPeer checks if peer is in map and has a valid connection -func (r *Relay) hasConnectedPeer(peerID peer.ID) bool { - if _, ok := r.Peers.Get(peerID); !ok { - return false - } - if r.Host.Network().Connectedness(peerID) != network.Connected { - slog.Debug("Peer not connected", "peer", peerID) - return false - } - return true -} - -// --- State Change Functions --- - -// onPeerStatus updates the status of a peer based on received metrics, adding local perspective -func (r *Relay) onPeerStatus(recvInfo PeerInfo) { - r.Peers.Set(recvInfo.ID, &recvInfo) -} - -// onPeerConnected is called when a new peer connects to the relay -func (r *Relay) onPeerConnected(peerID peer.ID) { - // Add to local peer map - r.Peers.Set(peerID, &PeerInfo{ - ID: peerID, - }) - - slog.Info("Peer connected", "peer", peerID) - - // Trigger immediate state exchange - go func() { - if err := r.publishRelayMetrics(context.Background()); err != nil { - slog.Error("Failed to publish relay metrics on connect", "err", err) - } else { - if err = r.publishRoomStates(context.Background()); err != nil { - slog.Error("Failed to publish room states on connect", "err", err) - } - } - }() -} - -// onPeerDisconnected marks a peer as disconnected in our status view and removes latency info -func (r *Relay) onPeerDisconnected(peerID peer.ID) { - // Relay peer disconnect handling - slog.Info("Mesh peer disconnected, deleting from local peer map", "peer", peerID) - if r.Peers.Has(peerID) { - r.Peers.Delete(peerID) - } - if r.Rooms.Has(peerID.String()) { - r.Rooms.Delete(peerID.String()) - } - - // TODO: If any rooms were routed through this peer, handle that case -} - -// updateMeshRoomStates merges received room states into the MeshRooms map -// TODO: Wrap in another type with timestamp or another mechanism to avoid conflicts -func (r *Relay) updateMeshRoomStates(peerID peer.ID, states []shared.RoomInfo) { - for _, state := range states { - if state.OwnerID == r.ID { - continue - } - - // If previously did not exist, but does now, request a connection if participants exist for our room - /*existed := r.Rooms.Has(state.ID.String()) - if !existed { - // Request connection to this peer if we have participants in our local room - if room, ok := r.LocalRooms.Get(state.ID); ok { - if len(room.Participants) > 0 { - slog.Debug("Got new remote room state, we locally have participants for, requesting stream", "room_name", room.Name, "peer", peerID) - if err := r.StreamProtocol.RequestStream(context.Background(), room, peerID); err != nil { - slog.Error("Failed to request stream for new remote room state", "room_name", room.Name, "peer", peerID, "err", err) - } - } - } - }*/ - - r.Rooms.Set(state.ID.String(), state) - } -} diff --git a/packages/relay/internal/proto/latency_tracker.pb.go b/packages/relay/internal/proto/latency_tracker.pb.go deleted file mode 100644 index 14fac202..00000000 --- a/packages/relay/internal/proto/latency_tracker.pb.go +++ /dev/null @@ -1,194 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.10 -// protoc (unknown) -// source: latency_tracker.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ProtoTimestampEntry struct { - state protoimpl.MessageState `protogen:"open.v1"` - Stage string `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` - Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoTimestampEntry) Reset() { - *x = ProtoTimestampEntry{} - mi := &file_latency_tracker_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoTimestampEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoTimestampEntry) ProtoMessage() {} - -func (x *ProtoTimestampEntry) ProtoReflect() protoreflect.Message { - mi := &file_latency_tracker_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoTimestampEntry.ProtoReflect.Descriptor instead. -func (*ProtoTimestampEntry) Descriptor() ([]byte, []int) { - return file_latency_tracker_proto_rawDescGZIP(), []int{0} -} - -func (x *ProtoTimestampEntry) GetStage() string { - if x != nil { - return x.Stage - } - return "" -} - -func (x *ProtoTimestampEntry) GetTime() *timestamppb.Timestamp { - if x != nil { - return x.Time - } - return nil -} - -type ProtoLatencyTracker struct { - state protoimpl.MessageState `protogen:"open.v1"` - SequenceId string `protobuf:"bytes,1,opt,name=sequence_id,json=sequenceId,proto3" json:"sequence_id,omitempty"` - Timestamps []*ProtoTimestampEntry `protobuf:"bytes,2,rep,name=timestamps,proto3" json:"timestamps,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoLatencyTracker) Reset() { - *x = ProtoLatencyTracker{} - mi := &file_latency_tracker_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoLatencyTracker) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoLatencyTracker) ProtoMessage() {} - -func (x *ProtoLatencyTracker) ProtoReflect() protoreflect.Message { - mi := &file_latency_tracker_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoLatencyTracker.ProtoReflect.Descriptor instead. -func (*ProtoLatencyTracker) Descriptor() ([]byte, []int) { - return file_latency_tracker_proto_rawDescGZIP(), []int{1} -} - -func (x *ProtoLatencyTracker) GetSequenceId() string { - if x != nil { - return x.SequenceId - } - return "" -} - -func (x *ProtoLatencyTracker) GetTimestamps() []*ProtoTimestampEntry { - if x != nil { - return x.Timestamps - } - return nil -} - -var File_latency_tracker_proto protoreflect.FileDescriptor - -const file_latency_tracker_proto_rawDesc = "" + - "\n" + - "\x15latency_tracker.proto\x12\x05proto\x1a\x1fgoogle/protobuf/timestamp.proto\"[\n" + - "\x13ProtoTimestampEntry\x12\x14\n" + - "\x05stage\x18\x01 \x01(\tR\x05stage\x12.\n" + - "\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\"r\n" + - "\x13ProtoLatencyTracker\x12\x1f\n" + - "\vsequence_id\x18\x01 \x01(\tR\n" + - "sequenceId\x12:\n" + - "\n" + - "timestamps\x18\x02 \x03(\v2\x1a.proto.ProtoTimestampEntryR\n" + - "timestampsB\x16Z\x14relay/internal/protob\x06proto3" - -var ( - file_latency_tracker_proto_rawDescOnce sync.Once - file_latency_tracker_proto_rawDescData []byte -) - -func file_latency_tracker_proto_rawDescGZIP() []byte { - file_latency_tracker_proto_rawDescOnce.Do(func() { - file_latency_tracker_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_latency_tracker_proto_rawDesc), len(file_latency_tracker_proto_rawDesc))) - }) - return file_latency_tracker_proto_rawDescData -} - -var file_latency_tracker_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_latency_tracker_proto_goTypes = []any{ - (*ProtoTimestampEntry)(nil), // 0: proto.ProtoTimestampEntry - (*ProtoLatencyTracker)(nil), // 1: proto.ProtoLatencyTracker - (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp -} -var file_latency_tracker_proto_depIdxs = []int32{ - 2, // 0: proto.ProtoTimestampEntry.time:type_name -> google.protobuf.Timestamp - 0, // 1: proto.ProtoLatencyTracker.timestamps:type_name -> proto.ProtoTimestampEntry - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_latency_tracker_proto_init() } -func file_latency_tracker_proto_init() { - if File_latency_tracker_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_latency_tracker_proto_rawDesc), len(file_latency_tracker_proto_rawDesc)), - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_latency_tracker_proto_goTypes, - DependencyIndexes: file_latency_tracker_proto_depIdxs, - MessageInfos: file_latency_tracker_proto_msgTypes, - }.Build() - File_latency_tracker_proto = out.File - file_latency_tracker_proto_goTypes = nil - file_latency_tracker_proto_depIdxs = nil -} diff --git a/packages/relay/internal/proto/mesh.pb.go b/packages/relay/internal/proto/mesh.pb.go deleted file mode 100644 index b25b8114..00000000 --- a/packages/relay/internal/proto/mesh.pb.go +++ /dev/null @@ -1,1170 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.6 -// protoc (unknown) -// source: mesh.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// MeshMessage is the top-level message for all relay-to-relay communication. -type MeshMessage struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Type: - // - // *MeshMessage_StateUpdate - // *MeshMessage_Ack - // *MeshMessage_RetransmissionRequest - // *MeshMessage_Retransmission - // *MeshMessage_Heartbeat - // *MeshMessage_SuspectRelay - // *MeshMessage_Disconnect - // *MeshMessage_ForwardSdp - // *MeshMessage_ForwardIce - // *MeshMessage_ForwardIngest - // *MeshMessage_StreamRequest - // *MeshMessage_Handshake - // *MeshMessage_HandshakeResponse - Type isMeshMessage_Type `protobuf_oneof:"type"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *MeshMessage) Reset() { - *x = MeshMessage{} - mi := &file_mesh_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MeshMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshMessage) ProtoMessage() {} - -func (x *MeshMessage) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshMessage.ProtoReflect.Descriptor instead. -func (*MeshMessage) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{0} -} - -func (x *MeshMessage) GetType() isMeshMessage_Type { - if x != nil { - return x.Type - } - return nil -} - -func (x *MeshMessage) GetStateUpdate() *StateUpdate { - if x != nil { - if x, ok := x.Type.(*MeshMessage_StateUpdate); ok { - return x.StateUpdate - } - } - return nil -} - -func (x *MeshMessage) GetAck() *Ack { - if x != nil { - if x, ok := x.Type.(*MeshMessage_Ack); ok { - return x.Ack - } - } - return nil -} - -func (x *MeshMessage) GetRetransmissionRequest() *RetransmissionRequest { - if x != nil { - if x, ok := x.Type.(*MeshMessage_RetransmissionRequest); ok { - return x.RetransmissionRequest - } - } - return nil -} - -func (x *MeshMessage) GetRetransmission() *Retransmission { - if x != nil { - if x, ok := x.Type.(*MeshMessage_Retransmission); ok { - return x.Retransmission - } - } - return nil -} - -func (x *MeshMessage) GetHeartbeat() *Heartbeat { - if x != nil { - if x, ok := x.Type.(*MeshMessage_Heartbeat); ok { - return x.Heartbeat - } - } - return nil -} - -func (x *MeshMessage) GetSuspectRelay() *SuspectRelay { - if x != nil { - if x, ok := x.Type.(*MeshMessage_SuspectRelay); ok { - return x.SuspectRelay - } - } - return nil -} - -func (x *MeshMessage) GetDisconnect() *Disconnect { - if x != nil { - if x, ok := x.Type.(*MeshMessage_Disconnect); ok { - return x.Disconnect - } - } - return nil -} - -func (x *MeshMessage) GetForwardSdp() *ForwardSDP { - if x != nil { - if x, ok := x.Type.(*MeshMessage_ForwardSdp); ok { - return x.ForwardSdp - } - } - return nil -} - -func (x *MeshMessage) GetForwardIce() *ForwardICE { - if x != nil { - if x, ok := x.Type.(*MeshMessage_ForwardIce); ok { - return x.ForwardIce - } - } - return nil -} - -func (x *MeshMessage) GetForwardIngest() *ForwardIngest { - if x != nil { - if x, ok := x.Type.(*MeshMessage_ForwardIngest); ok { - return x.ForwardIngest - } - } - return nil -} - -func (x *MeshMessage) GetStreamRequest() *StreamRequest { - if x != nil { - if x, ok := x.Type.(*MeshMessage_StreamRequest); ok { - return x.StreamRequest - } - } - return nil -} - -func (x *MeshMessage) GetHandshake() *Handshake { - if x != nil { - if x, ok := x.Type.(*MeshMessage_Handshake); ok { - return x.Handshake - } - } - return nil -} - -func (x *MeshMessage) GetHandshakeResponse() *HandshakeResponse { - if x != nil { - if x, ok := x.Type.(*MeshMessage_HandshakeResponse); ok { - return x.HandshakeResponse - } - } - return nil -} - -type isMeshMessage_Type interface { - isMeshMessage_Type() -} - -type MeshMessage_StateUpdate struct { - // Level 0 - StateUpdate *StateUpdate `protobuf:"bytes,1,opt,name=state_update,json=stateUpdate,proto3,oneof"` -} - -type MeshMessage_Ack struct { - Ack *Ack `protobuf:"bytes,2,opt,name=ack,proto3,oneof"` -} - -type MeshMessage_RetransmissionRequest struct { - RetransmissionRequest *RetransmissionRequest `protobuf:"bytes,3,opt,name=retransmission_request,json=retransmissionRequest,proto3,oneof"` -} - -type MeshMessage_Retransmission struct { - Retransmission *Retransmission `protobuf:"bytes,4,opt,name=retransmission,proto3,oneof"` -} - -type MeshMessage_Heartbeat struct { - Heartbeat *Heartbeat `protobuf:"bytes,5,opt,name=heartbeat,proto3,oneof"` -} - -type MeshMessage_SuspectRelay struct { - SuspectRelay *SuspectRelay `protobuf:"bytes,6,opt,name=suspect_relay,json=suspectRelay,proto3,oneof"` -} - -type MeshMessage_Disconnect struct { - Disconnect *Disconnect `protobuf:"bytes,7,opt,name=disconnect,proto3,oneof"` -} - -type MeshMessage_ForwardSdp struct { - // Level 1 - ForwardSdp *ForwardSDP `protobuf:"bytes,8,opt,name=forward_sdp,json=forwardSdp,proto3,oneof"` -} - -type MeshMessage_ForwardIce struct { - ForwardIce *ForwardICE `protobuf:"bytes,9,opt,name=forward_ice,json=forwardIce,proto3,oneof"` -} - -type MeshMessage_ForwardIngest struct { - ForwardIngest *ForwardIngest `protobuf:"bytes,10,opt,name=forward_ingest,json=forwardIngest,proto3,oneof"` -} - -type MeshMessage_StreamRequest struct { - StreamRequest *StreamRequest `protobuf:"bytes,11,opt,name=stream_request,json=streamRequest,proto3,oneof"` -} - -type MeshMessage_Handshake struct { - // Level 2 - Handshake *Handshake `protobuf:"bytes,12,opt,name=handshake,proto3,oneof"` -} - -type MeshMessage_HandshakeResponse struct { - HandshakeResponse *HandshakeResponse `protobuf:"bytes,13,opt,name=handshake_response,json=handshakeResponse,proto3,oneof"` -} - -func (*MeshMessage_StateUpdate) isMeshMessage_Type() {} - -func (*MeshMessage_Ack) isMeshMessage_Type() {} - -func (*MeshMessage_RetransmissionRequest) isMeshMessage_Type() {} - -func (*MeshMessage_Retransmission) isMeshMessage_Type() {} - -func (*MeshMessage_Heartbeat) isMeshMessage_Type() {} - -func (*MeshMessage_SuspectRelay) isMeshMessage_Type() {} - -func (*MeshMessage_Disconnect) isMeshMessage_Type() {} - -func (*MeshMessage_ForwardSdp) isMeshMessage_Type() {} - -func (*MeshMessage_ForwardIce) isMeshMessage_Type() {} - -func (*MeshMessage_ForwardIngest) isMeshMessage_Type() {} - -func (*MeshMessage_StreamRequest) isMeshMessage_Type() {} - -func (*MeshMessage_Handshake) isMeshMessage_Type() {} - -func (*MeshMessage_HandshakeResponse) isMeshMessage_Type() {} - -// Handshake to inititiate new connection to mesh. -type Handshake struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the relay - DhPublicKey string `protobuf:"bytes,2,opt,name=dh_public_key,json=dhPublicKey,proto3" json:"dh_public_key,omitempty"` // base64 encoded Diffie-Hellman public key - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Handshake) Reset() { - *x = Handshake{} - mi := &file_mesh_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Handshake) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Handshake) ProtoMessage() {} - -func (x *Handshake) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Handshake.ProtoReflect.Descriptor instead. -func (*Handshake) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{1} -} - -func (x *Handshake) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *Handshake) GetDhPublicKey() string { - if x != nil { - return x.DhPublicKey - } - return "" -} - -// HandshakeResponse to respond to a mesh joiner. -type HandshakeResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` - DhPublicKey string `protobuf:"bytes,2,opt,name=dh_public_key,json=dhPublicKey,proto3" json:"dh_public_key,omitempty"` - Approvals map[string]string `protobuf:"bytes,3,rep,name=approvals,proto3" json:"approvals,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // relay id to signature - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *HandshakeResponse) Reset() { - *x = HandshakeResponse{} - mi := &file_mesh_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *HandshakeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HandshakeResponse) ProtoMessage() {} - -func (x *HandshakeResponse) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HandshakeResponse.ProtoReflect.Descriptor instead. -func (*HandshakeResponse) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{2} -} - -func (x *HandshakeResponse) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *HandshakeResponse) GetDhPublicKey() string { - if x != nil { - return x.DhPublicKey - } - return "" -} - -func (x *HandshakeResponse) GetApprovals() map[string]string { - if x != nil { - return x.Approvals - } - return nil -} - -// Forwarded SDP from another relay. -type ForwardSDP struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - ParticipantId string `protobuf:"bytes,2,opt,name=participant_id,json=participantId,proto3" json:"participant_id,omitempty"` - Sdp string `protobuf:"bytes,3,opt,name=sdp,proto3" json:"sdp,omitempty"` - Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` // "offer" or "answer" - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ForwardSDP) Reset() { - *x = ForwardSDP{} - mi := &file_mesh_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ForwardSDP) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForwardSDP) ProtoMessage() {} - -func (x *ForwardSDP) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForwardSDP.ProtoReflect.Descriptor instead. -func (*ForwardSDP) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{3} -} - -func (x *ForwardSDP) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -func (x *ForwardSDP) GetParticipantId() string { - if x != nil { - return x.ParticipantId - } - return "" -} - -func (x *ForwardSDP) GetSdp() string { - if x != nil { - return x.Sdp - } - return "" -} - -func (x *ForwardSDP) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -// Forwarded ICE candidate from another relay. -type ForwardICE struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - ParticipantId string `protobuf:"bytes,2,opt,name=participant_id,json=participantId,proto3" json:"participant_id,omitempty"` - Candidate *ICECandidateInit `protobuf:"bytes,3,opt,name=candidate,proto3" json:"candidate,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ForwardICE) Reset() { - *x = ForwardICE{} - mi := &file_mesh_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ForwardICE) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForwardICE) ProtoMessage() {} - -func (x *ForwardICE) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForwardICE.ProtoReflect.Descriptor instead. -func (*ForwardICE) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{4} -} - -func (x *ForwardICE) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -func (x *ForwardICE) GetParticipantId() string { - if x != nil { - return x.ParticipantId - } - return "" -} - -func (x *ForwardICE) GetCandidate() *ICECandidateInit { - if x != nil { - return x.Candidate - } - return nil -} - -// Forwarded ingest room from another relay. -type ForwardIngest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ForwardIngest) Reset() { - *x = ForwardIngest{} - mi := &file_mesh_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ForwardIngest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForwardIngest) ProtoMessage() {} - -func (x *ForwardIngest) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForwardIngest.ProtoReflect.Descriptor instead. -func (*ForwardIngest) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{5} -} - -func (x *ForwardIngest) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -// Stream request from mesh. -type StreamRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *StreamRequest) Reset() { - *x = StreamRequest{} - mi := &file_mesh_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *StreamRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamRequest) ProtoMessage() {} - -func (x *StreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamRequest.ProtoReflect.Descriptor instead. -func (*StreamRequest) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{6} -} - -func (x *StreamRequest) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -// StateUpdate propagates entity state changes across the mesh. -type StateUpdate struct { - state protoimpl.MessageState `protogen:"open.v1"` - SequenceNumber uint64 `protobuf:"varint,1,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"` // Unique sequence number for this update - Entities map[string]*EntityState `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Key: entity_id (e.g., room name), Value: EntityState - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *StateUpdate) Reset() { - *x = StateUpdate{} - mi := &file_mesh_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *StateUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StateUpdate) ProtoMessage() {} - -func (x *StateUpdate) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StateUpdate.ProtoReflect.Descriptor instead. -func (*StateUpdate) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{7} -} - -func (x *StateUpdate) GetSequenceNumber() uint64 { - if x != nil { - return x.SequenceNumber - } - return 0 -} - -func (x *StateUpdate) GetEntities() map[string]*EntityState { - if x != nil { - return x.Entities - } - return nil -} - -// Ack acknowledges receipt of a StateUpdate. -type Ack struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the acknowledging relay - SequenceNumber uint64 `protobuf:"varint,2,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"` // Sequence number being acknowledged - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Ack) Reset() { - *x = Ack{} - mi := &file_mesh_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Ack) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Ack) ProtoMessage() {} - -func (x *Ack) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Ack.ProtoReflect.Descriptor instead. -func (*Ack) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{8} -} - -func (x *Ack) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *Ack) GetSequenceNumber() uint64 { - if x != nil { - return x.SequenceNumber - } - return 0 -} - -// RetransmissionRequest requests a missed StateUpdate. -type RetransmissionRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the requesting relay - SequenceNumber uint64 `protobuf:"varint,2,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"` // Sequence number of the missed update - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *RetransmissionRequest) Reset() { - *x = RetransmissionRequest{} - mi := &file_mesh_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RetransmissionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RetransmissionRequest) ProtoMessage() {} - -func (x *RetransmissionRequest) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RetransmissionRequest.ProtoReflect.Descriptor instead. -func (*RetransmissionRequest) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{9} -} - -func (x *RetransmissionRequest) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *RetransmissionRequest) GetSequenceNumber() uint64 { - if x != nil { - return x.SequenceNumber - } - return 0 -} - -// Retransmission resends a StateUpdate. -type Retransmission struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the sending relay - StateUpdate *StateUpdate `protobuf:"bytes,2,opt,name=state_update,json=stateUpdate,proto3" json:"state_update,omitempty"` // The retransmitted update - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Retransmission) Reset() { - *x = Retransmission{} - mi := &file_mesh_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Retransmission) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Retransmission) ProtoMessage() {} - -func (x *Retransmission) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Retransmission.ProtoReflect.Descriptor instead. -func (*Retransmission) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{10} -} - -func (x *Retransmission) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *Retransmission) GetStateUpdate() *StateUpdate { - if x != nil { - return x.StateUpdate - } - return nil -} - -// Heartbeat signals relay liveness. -type Heartbeat struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the sending relay - Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Time of the heartbeat - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Heartbeat) Reset() { - *x = Heartbeat{} - mi := &file_mesh_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Heartbeat) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Heartbeat) ProtoMessage() {} - -func (x *Heartbeat) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Heartbeat.ProtoReflect.Descriptor instead. -func (*Heartbeat) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{11} -} - -func (x *Heartbeat) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *Heartbeat) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -// SuspectRelay marks a relay as potentially unresponsive. -type SuspectRelay struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the suspected relay - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for suspicion (e.g., "no heartbeat") - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *SuspectRelay) Reset() { - *x = SuspectRelay{} - mi := &file_mesh_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SuspectRelay) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SuspectRelay) ProtoMessage() {} - -func (x *SuspectRelay) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SuspectRelay.ProtoReflect.Descriptor instead. -func (*SuspectRelay) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{12} -} - -func (x *SuspectRelay) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *SuspectRelay) GetReason() string { - if x != nil { - return x.Reason - } - return "" -} - -// Disconnect signals to remove a relay from the mesh. -type Disconnect struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` // UUID of the relay to disconnect - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for disconnection (e.g., "unresponsive") - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Disconnect) Reset() { - *x = Disconnect{} - mi := &file_mesh_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Disconnect) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Disconnect) ProtoMessage() {} - -func (x *Disconnect) ProtoReflect() protoreflect.Message { - mi := &file_mesh_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Disconnect.ProtoReflect.Descriptor instead. -func (*Disconnect) Descriptor() ([]byte, []int) { - return file_mesh_proto_rawDescGZIP(), []int{13} -} - -func (x *Disconnect) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *Disconnect) GetReason() string { - if x != nil { - return x.Reason - } - return "" -} - -var File_mesh_proto protoreflect.FileDescriptor - -const file_mesh_proto_rawDesc = "" + - "\n" + - "\n" + - "mesh.proto\x12\x05proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\vstate.proto\x1a\fwebrtc.proto\"\x90\x06\n" + - "\vMeshMessage\x127\n" + - "\fstate_update\x18\x01 \x01(\v2\x12.proto.StateUpdateH\x00R\vstateUpdate\x12\x1e\n" + - "\x03ack\x18\x02 \x01(\v2\n" + - ".proto.AckH\x00R\x03ack\x12U\n" + - "\x16retransmission_request\x18\x03 \x01(\v2\x1c.proto.RetransmissionRequestH\x00R\x15retransmissionRequest\x12?\n" + - "\x0eretransmission\x18\x04 \x01(\v2\x15.proto.RetransmissionH\x00R\x0eretransmission\x120\n" + - "\theartbeat\x18\x05 \x01(\v2\x10.proto.HeartbeatH\x00R\theartbeat\x12:\n" + - "\rsuspect_relay\x18\x06 \x01(\v2\x13.proto.SuspectRelayH\x00R\fsuspectRelay\x123\n" + - "\n" + - "disconnect\x18\a \x01(\v2\x11.proto.DisconnectH\x00R\n" + - "disconnect\x124\n" + - "\vforward_sdp\x18\b \x01(\v2\x11.proto.ForwardSDPH\x00R\n" + - "forwardSdp\x124\n" + - "\vforward_ice\x18\t \x01(\v2\x11.proto.ForwardICEH\x00R\n" + - "forwardIce\x12=\n" + - "\x0eforward_ingest\x18\n" + - " \x01(\v2\x14.proto.ForwardIngestH\x00R\rforwardIngest\x12=\n" + - "\x0estream_request\x18\v \x01(\v2\x14.proto.StreamRequestH\x00R\rstreamRequest\x120\n" + - "\thandshake\x18\f \x01(\v2\x10.proto.HandshakeH\x00R\thandshake\x12I\n" + - "\x12handshake_response\x18\r \x01(\v2\x18.proto.HandshakeResponseH\x00R\x11handshakeResponseB\x06\n" + - "\x04type\"J\n" + - "\tHandshake\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x12\"\n" + - "\rdh_public_key\x18\x02 \x01(\tR\vdhPublicKey\"\xd7\x01\n" + - "\x11HandshakeResponse\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x12\"\n" + - "\rdh_public_key\x18\x02 \x01(\tR\vdhPublicKey\x12E\n" + - "\tapprovals\x18\x03 \x03(\v2'.proto.HandshakeResponse.ApprovalsEntryR\tapprovals\x1a<\n" + - "\x0eApprovalsEntry\x12\x10\n" + - "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"v\n" + - "\n" + - "ForwardSDP\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x12%\n" + - "\x0eparticipant_id\x18\x02 \x01(\tR\rparticipantId\x12\x10\n" + - "\x03sdp\x18\x03 \x01(\tR\x03sdp\x12\x12\n" + - "\x04type\x18\x04 \x01(\tR\x04type\"\x87\x01\n" + - "\n" + - "ForwardICE\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x12%\n" + - "\x0eparticipant_id\x18\x02 \x01(\tR\rparticipantId\x125\n" + - "\tcandidate\x18\x03 \x01(\v2\x17.proto.ICECandidateInitR\tcandidate\",\n" + - "\rForwardIngest\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\",\n" + - "\rStreamRequest\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\"\xc5\x01\n" + - "\vStateUpdate\x12'\n" + - "\x0fsequence_number\x18\x01 \x01(\x04R\x0esequenceNumber\x12<\n" + - "\bentities\x18\x02 \x03(\v2 .proto.StateUpdate.EntitiesEntryR\bentities\x1aO\n" + - "\rEntitiesEntry\x12\x10\n" + - "\x03key\x18\x01 \x01(\tR\x03key\x12(\n" + - "\x05value\x18\x02 \x01(\v2\x12.proto.EntityStateR\x05value:\x028\x01\"I\n" + - "\x03Ack\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x12'\n" + - "\x0fsequence_number\x18\x02 \x01(\x04R\x0esequenceNumber\"[\n" + - "\x15RetransmissionRequest\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x12'\n" + - "\x0fsequence_number\x18\x02 \x01(\x04R\x0esequenceNumber\"b\n" + - "\x0eRetransmission\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x125\n" + - "\fstate_update\x18\x02 \x01(\v2\x12.proto.StateUpdateR\vstateUpdate\"`\n" + - "\tHeartbeat\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x128\n" + - "\ttimestamp\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\"A\n" + - "\fSuspectRelay\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x12\x16\n" + - "\x06reason\x18\x02 \x01(\tR\x06reason\"?\n" + - "\n" + - "Disconnect\x12\x19\n" + - "\brelay_id\x18\x01 \x01(\tR\arelayId\x12\x16\n" + - "\x06reason\x18\x02 \x01(\tR\x06reasonB\x16Z\x14relay/internal/protob\x06proto3" - -var ( - file_mesh_proto_rawDescOnce sync.Once - file_mesh_proto_rawDescData []byte -) - -func file_mesh_proto_rawDescGZIP() []byte { - file_mesh_proto_rawDescOnce.Do(func() { - file_mesh_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_mesh_proto_rawDesc), len(file_mesh_proto_rawDesc))) - }) - return file_mesh_proto_rawDescData -} - -var file_mesh_proto_msgTypes = make([]protoimpl.MessageInfo, 16) -var file_mesh_proto_goTypes = []any{ - (*MeshMessage)(nil), // 0: proto.MeshMessage - (*Handshake)(nil), // 1: proto.Handshake - (*HandshakeResponse)(nil), // 2: proto.HandshakeResponse - (*ForwardSDP)(nil), // 3: proto.ForwardSDP - (*ForwardICE)(nil), // 4: proto.ForwardICE - (*ForwardIngest)(nil), // 5: proto.ForwardIngest - (*StreamRequest)(nil), // 6: proto.StreamRequest - (*StateUpdate)(nil), // 7: proto.StateUpdate - (*Ack)(nil), // 8: proto.Ack - (*RetransmissionRequest)(nil), // 9: proto.RetransmissionRequest - (*Retransmission)(nil), // 10: proto.Retransmission - (*Heartbeat)(nil), // 11: proto.Heartbeat - (*SuspectRelay)(nil), // 12: proto.SuspectRelay - (*Disconnect)(nil), // 13: proto.Disconnect - nil, // 14: proto.HandshakeResponse.ApprovalsEntry - nil, // 15: proto.StateUpdate.EntitiesEntry - (*ICECandidateInit)(nil), // 16: proto.ICECandidateInit - (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp - (*EntityState)(nil), // 18: proto.EntityState -} -var file_mesh_proto_depIdxs = []int32{ - 7, // 0: proto.MeshMessage.state_update:type_name -> proto.StateUpdate - 8, // 1: proto.MeshMessage.ack:type_name -> proto.Ack - 9, // 2: proto.MeshMessage.retransmission_request:type_name -> proto.RetransmissionRequest - 10, // 3: proto.MeshMessage.retransmission:type_name -> proto.Retransmission - 11, // 4: proto.MeshMessage.heartbeat:type_name -> proto.Heartbeat - 12, // 5: proto.MeshMessage.suspect_relay:type_name -> proto.SuspectRelay - 13, // 6: proto.MeshMessage.disconnect:type_name -> proto.Disconnect - 3, // 7: proto.MeshMessage.forward_sdp:type_name -> proto.ForwardSDP - 4, // 8: proto.MeshMessage.forward_ice:type_name -> proto.ForwardICE - 5, // 9: proto.MeshMessage.forward_ingest:type_name -> proto.ForwardIngest - 6, // 10: proto.MeshMessage.stream_request:type_name -> proto.StreamRequest - 1, // 11: proto.MeshMessage.handshake:type_name -> proto.Handshake - 2, // 12: proto.MeshMessage.handshake_response:type_name -> proto.HandshakeResponse - 14, // 13: proto.HandshakeResponse.approvals:type_name -> proto.HandshakeResponse.ApprovalsEntry - 16, // 14: proto.ForwardICE.candidate:type_name -> proto.ICECandidateInit - 15, // 15: proto.StateUpdate.entities:type_name -> proto.StateUpdate.EntitiesEntry - 7, // 16: proto.Retransmission.state_update:type_name -> proto.StateUpdate - 17, // 17: proto.Heartbeat.timestamp:type_name -> google.protobuf.Timestamp - 18, // 18: proto.StateUpdate.EntitiesEntry.value:type_name -> proto.EntityState - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name -} - -func init() { file_mesh_proto_init() } -func file_mesh_proto_init() { - if File_mesh_proto != nil { - return - } - file_state_proto_init() - file_webrtc_proto_init() - file_mesh_proto_msgTypes[0].OneofWrappers = []any{ - (*MeshMessage_StateUpdate)(nil), - (*MeshMessage_Ack)(nil), - (*MeshMessage_RetransmissionRequest)(nil), - (*MeshMessage_Retransmission)(nil), - (*MeshMessage_Heartbeat)(nil), - (*MeshMessage_SuspectRelay)(nil), - (*MeshMessage_Disconnect)(nil), - (*MeshMessage_ForwardSdp)(nil), - (*MeshMessage_ForwardIce)(nil), - (*MeshMessage_ForwardIngest)(nil), - (*MeshMessage_StreamRequest)(nil), - (*MeshMessage_Handshake)(nil), - (*MeshMessage_HandshakeResponse)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_mesh_proto_rawDesc), len(file_mesh_proto_rawDesc)), - NumEnums: 0, - NumMessages: 16, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_mesh_proto_goTypes, - DependencyIndexes: file_mesh_proto_depIdxs, - MessageInfos: file_mesh_proto_msgTypes, - }.Build() - File_mesh_proto = out.File - file_mesh_proto_goTypes = nil - file_mesh_proto_depIdxs = nil -} diff --git a/packages/relay/internal/proto/messages.pb.go b/packages/relay/internal/proto/messages.pb.go deleted file mode 100644 index 19ec59e5..00000000 --- a/packages/relay/internal/proto/messages.pb.go +++ /dev/null @@ -1,547 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.10 -// protoc (unknown) -// source: messages.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ProtoMessageBase struct { - state protoimpl.MessageState `protogen:"open.v1"` - PayloadType string `protobuf:"bytes,1,opt,name=payload_type,json=payloadType,proto3" json:"payload_type,omitempty"` - Latency *ProtoLatencyTracker `protobuf:"bytes,2,opt,name=latency,proto3" json:"latency,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMessageBase) Reset() { - *x = ProtoMessageBase{} - mi := &file_messages_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMessageBase) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMessageBase) ProtoMessage() {} - -func (x *ProtoMessageBase) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMessageBase.ProtoReflect.Descriptor instead. -func (*ProtoMessageBase) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{0} -} - -func (x *ProtoMessageBase) GetPayloadType() string { - if x != nil { - return x.PayloadType - } - return "" -} - -func (x *ProtoMessageBase) GetLatency() *ProtoLatencyTracker { - if x != nil { - return x.Latency - } - return nil -} - -type ProtoMessage struct { - state protoimpl.MessageState `protogen:"open.v1"` - MessageBase *ProtoMessageBase `protobuf:"bytes,1,opt,name=message_base,json=messageBase,proto3" json:"message_base,omitempty"` - // Types that are valid to be assigned to Payload: - // - // *ProtoMessage_MouseMove - // *ProtoMessage_MouseMoveAbs - // *ProtoMessage_MouseWheel - // *ProtoMessage_MouseKeyDown - // *ProtoMessage_MouseKeyUp - // *ProtoMessage_KeyDown - // *ProtoMessage_KeyUp - // *ProtoMessage_ControllerAttach - // *ProtoMessage_ControllerDetach - // *ProtoMessage_ControllerRumble - // *ProtoMessage_ControllerStateBatch - // *ProtoMessage_Ice - // *ProtoMessage_Sdp - // *ProtoMessage_Raw - // *ProtoMessage_ClientRequestRoomStream - // *ProtoMessage_ClientDisconnected - // *ProtoMessage_ServerPushStream - Payload isProtoMessage_Payload `protobuf_oneof:"payload"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMessage) Reset() { - *x = ProtoMessage{} - mi := &file_messages_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMessage) ProtoMessage() {} - -func (x *ProtoMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMessage.ProtoReflect.Descriptor instead. -func (*ProtoMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{1} -} - -func (x *ProtoMessage) GetMessageBase() *ProtoMessageBase { - if x != nil { - return x.MessageBase - } - return nil -} - -func (x *ProtoMessage) GetPayload() isProtoMessage_Payload { - if x != nil { - return x.Payload - } - return nil -} - -func (x *ProtoMessage) GetMouseMove() *ProtoMouseMove { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_MouseMove); ok { - return x.MouseMove - } - } - return nil -} - -func (x *ProtoMessage) GetMouseMoveAbs() *ProtoMouseMoveAbs { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_MouseMoveAbs); ok { - return x.MouseMoveAbs - } - } - return nil -} - -func (x *ProtoMessage) GetMouseWheel() *ProtoMouseWheel { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_MouseWheel); ok { - return x.MouseWheel - } - } - return nil -} - -func (x *ProtoMessage) GetMouseKeyDown() *ProtoMouseKeyDown { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_MouseKeyDown); ok { - return x.MouseKeyDown - } - } - return nil -} - -func (x *ProtoMessage) GetMouseKeyUp() *ProtoMouseKeyUp { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_MouseKeyUp); ok { - return x.MouseKeyUp - } - } - return nil -} - -func (x *ProtoMessage) GetKeyDown() *ProtoKeyDown { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_KeyDown); ok { - return x.KeyDown - } - } - return nil -} - -func (x *ProtoMessage) GetKeyUp() *ProtoKeyUp { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_KeyUp); ok { - return x.KeyUp - } - } - return nil -} - -func (x *ProtoMessage) GetControllerAttach() *ProtoControllerAttach { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ControllerAttach); ok { - return x.ControllerAttach - } - } - return nil -} - -func (x *ProtoMessage) GetControllerDetach() *ProtoControllerDetach { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ControllerDetach); ok { - return x.ControllerDetach - } - } - return nil -} - -func (x *ProtoMessage) GetControllerRumble() *ProtoControllerRumble { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ControllerRumble); ok { - return x.ControllerRumble - } - } - return nil -} - -func (x *ProtoMessage) GetControllerStateBatch() *ProtoControllerStateBatch { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ControllerStateBatch); ok { - return x.ControllerStateBatch - } - } - return nil -} - -func (x *ProtoMessage) GetIce() *ProtoICE { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_Ice); ok { - return x.Ice - } - } - return nil -} - -func (x *ProtoMessage) GetSdp() *ProtoSDP { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_Sdp); ok { - return x.Sdp - } - } - return nil -} - -func (x *ProtoMessage) GetRaw() *ProtoRaw { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_Raw); ok { - return x.Raw - } - } - return nil -} - -func (x *ProtoMessage) GetClientRequestRoomStream() *ProtoClientRequestRoomStream { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ClientRequestRoomStream); ok { - return x.ClientRequestRoomStream - } - } - return nil -} - -func (x *ProtoMessage) GetClientDisconnected() *ProtoClientDisconnected { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ClientDisconnected); ok { - return x.ClientDisconnected - } - } - return nil -} - -func (x *ProtoMessage) GetServerPushStream() *ProtoServerPushStream { - if x != nil { - if x, ok := x.Payload.(*ProtoMessage_ServerPushStream); ok { - return x.ServerPushStream - } - } - return nil -} - -type isProtoMessage_Payload interface { - isProtoMessage_Payload() -} - -type ProtoMessage_MouseMove struct { - // Input types - MouseMove *ProtoMouseMove `protobuf:"bytes,2,opt,name=mouse_move,json=mouseMove,proto3,oneof"` -} - -type ProtoMessage_MouseMoveAbs struct { - MouseMoveAbs *ProtoMouseMoveAbs `protobuf:"bytes,3,opt,name=mouse_move_abs,json=mouseMoveAbs,proto3,oneof"` -} - -type ProtoMessage_MouseWheel struct { - MouseWheel *ProtoMouseWheel `protobuf:"bytes,4,opt,name=mouse_wheel,json=mouseWheel,proto3,oneof"` -} - -type ProtoMessage_MouseKeyDown struct { - MouseKeyDown *ProtoMouseKeyDown `protobuf:"bytes,5,opt,name=mouse_key_down,json=mouseKeyDown,proto3,oneof"` -} - -type ProtoMessage_MouseKeyUp struct { - MouseKeyUp *ProtoMouseKeyUp `protobuf:"bytes,6,opt,name=mouse_key_up,json=mouseKeyUp,proto3,oneof"` -} - -type ProtoMessage_KeyDown struct { - KeyDown *ProtoKeyDown `protobuf:"bytes,7,opt,name=key_down,json=keyDown,proto3,oneof"` -} - -type ProtoMessage_KeyUp struct { - KeyUp *ProtoKeyUp `protobuf:"bytes,8,opt,name=key_up,json=keyUp,proto3,oneof"` -} - -type ProtoMessage_ControllerAttach struct { - // Controller input types - ControllerAttach *ProtoControllerAttach `protobuf:"bytes,9,opt,name=controller_attach,json=controllerAttach,proto3,oneof"` -} - -type ProtoMessage_ControllerDetach struct { - ControllerDetach *ProtoControllerDetach `protobuf:"bytes,10,opt,name=controller_detach,json=controllerDetach,proto3,oneof"` -} - -type ProtoMessage_ControllerRumble struct { - ControllerRumble *ProtoControllerRumble `protobuf:"bytes,11,opt,name=controller_rumble,json=controllerRumble,proto3,oneof"` -} - -type ProtoMessage_ControllerStateBatch struct { - ControllerStateBatch *ProtoControllerStateBatch `protobuf:"bytes,12,opt,name=controller_state_batch,json=controllerStateBatch,proto3,oneof"` -} - -type ProtoMessage_Ice struct { - // Signaling types - Ice *ProtoICE `protobuf:"bytes,20,opt,name=ice,proto3,oneof"` -} - -type ProtoMessage_Sdp struct { - Sdp *ProtoSDP `protobuf:"bytes,21,opt,name=sdp,proto3,oneof"` -} - -type ProtoMessage_Raw struct { - Raw *ProtoRaw `protobuf:"bytes,22,opt,name=raw,proto3,oneof"` -} - -type ProtoMessage_ClientRequestRoomStream struct { - ClientRequestRoomStream *ProtoClientRequestRoomStream `protobuf:"bytes,23,opt,name=client_request_room_stream,json=clientRequestRoomStream,proto3,oneof"` -} - -type ProtoMessage_ClientDisconnected struct { - ClientDisconnected *ProtoClientDisconnected `protobuf:"bytes,24,opt,name=client_disconnected,json=clientDisconnected,proto3,oneof"` -} - -type ProtoMessage_ServerPushStream struct { - ServerPushStream *ProtoServerPushStream `protobuf:"bytes,25,opt,name=server_push_stream,json=serverPushStream,proto3,oneof"` -} - -func (*ProtoMessage_MouseMove) isProtoMessage_Payload() {} - -func (*ProtoMessage_MouseMoveAbs) isProtoMessage_Payload() {} - -func (*ProtoMessage_MouseWheel) isProtoMessage_Payload() {} - -func (*ProtoMessage_MouseKeyDown) isProtoMessage_Payload() {} - -func (*ProtoMessage_MouseKeyUp) isProtoMessage_Payload() {} - -func (*ProtoMessage_KeyDown) isProtoMessage_Payload() {} - -func (*ProtoMessage_KeyUp) isProtoMessage_Payload() {} - -func (*ProtoMessage_ControllerAttach) isProtoMessage_Payload() {} - -func (*ProtoMessage_ControllerDetach) isProtoMessage_Payload() {} - -func (*ProtoMessage_ControllerRumble) isProtoMessage_Payload() {} - -func (*ProtoMessage_ControllerStateBatch) isProtoMessage_Payload() {} - -func (*ProtoMessage_Ice) isProtoMessage_Payload() {} - -func (*ProtoMessage_Sdp) isProtoMessage_Payload() {} - -func (*ProtoMessage_Raw) isProtoMessage_Payload() {} - -func (*ProtoMessage_ClientRequestRoomStream) isProtoMessage_Payload() {} - -func (*ProtoMessage_ClientDisconnected) isProtoMessage_Payload() {} - -func (*ProtoMessage_ServerPushStream) isProtoMessage_Payload() {} - -var File_messages_proto protoreflect.FileDescriptor - -const file_messages_proto_rawDesc = "" + - "\n" + - "\x0emessages.proto\x12\x05proto\x1a\vtypes.proto\x1a\x15latency_tracker.proto\"k\n" + - "\x10ProtoMessageBase\x12!\n" + - "\fpayload_type\x18\x01 \x01(\tR\vpayloadType\x124\n" + - "\alatency\x18\x02 \x01(\v2\x1a.proto.ProtoLatencyTrackerR\alatency\"\x9b\t\n" + - "\fProtoMessage\x12:\n" + - "\fmessage_base\x18\x01 \x01(\v2\x17.proto.ProtoMessageBaseR\vmessageBase\x126\n" + - "\n" + - "mouse_move\x18\x02 \x01(\v2\x15.proto.ProtoMouseMoveH\x00R\tmouseMove\x12@\n" + - "\x0emouse_move_abs\x18\x03 \x01(\v2\x18.proto.ProtoMouseMoveAbsH\x00R\fmouseMoveAbs\x129\n" + - "\vmouse_wheel\x18\x04 \x01(\v2\x16.proto.ProtoMouseWheelH\x00R\n" + - "mouseWheel\x12@\n" + - "\x0emouse_key_down\x18\x05 \x01(\v2\x18.proto.ProtoMouseKeyDownH\x00R\fmouseKeyDown\x12:\n" + - "\fmouse_key_up\x18\x06 \x01(\v2\x16.proto.ProtoMouseKeyUpH\x00R\n" + - "mouseKeyUp\x120\n" + - "\bkey_down\x18\a \x01(\v2\x13.proto.ProtoKeyDownH\x00R\akeyDown\x12*\n" + - "\x06key_up\x18\b \x01(\v2\x11.proto.ProtoKeyUpH\x00R\x05keyUp\x12K\n" + - "\x11controller_attach\x18\t \x01(\v2\x1c.proto.ProtoControllerAttachH\x00R\x10controllerAttach\x12K\n" + - "\x11controller_detach\x18\n" + - " \x01(\v2\x1c.proto.ProtoControllerDetachH\x00R\x10controllerDetach\x12K\n" + - "\x11controller_rumble\x18\v \x01(\v2\x1c.proto.ProtoControllerRumbleH\x00R\x10controllerRumble\x12X\n" + - "\x16controller_state_batch\x18\f \x01(\v2 .proto.ProtoControllerStateBatchH\x00R\x14controllerStateBatch\x12#\n" + - "\x03ice\x18\x14 \x01(\v2\x0f.proto.ProtoICEH\x00R\x03ice\x12#\n" + - "\x03sdp\x18\x15 \x01(\v2\x0f.proto.ProtoSDPH\x00R\x03sdp\x12#\n" + - "\x03raw\x18\x16 \x01(\v2\x0f.proto.ProtoRawH\x00R\x03raw\x12b\n" + - "\x1aclient_request_room_stream\x18\x17 \x01(\v2#.proto.ProtoClientRequestRoomStreamH\x00R\x17clientRequestRoomStream\x12Q\n" + - "\x13client_disconnected\x18\x18 \x01(\v2\x1e.proto.ProtoClientDisconnectedH\x00R\x12clientDisconnected\x12L\n" + - "\x12server_push_stream\x18\x19 \x01(\v2\x1c.proto.ProtoServerPushStreamH\x00R\x10serverPushStreamB\t\n" + - "\apayloadB\x16Z\x14relay/internal/protob\x06proto3" - -var ( - file_messages_proto_rawDescOnce sync.Once - file_messages_proto_rawDescData []byte -) - -func file_messages_proto_rawDescGZIP() []byte { - file_messages_proto_rawDescOnce.Do(func() { - file_messages_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_messages_proto_rawDesc), len(file_messages_proto_rawDesc))) - }) - return file_messages_proto_rawDescData -} - -var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_messages_proto_goTypes = []any{ - (*ProtoMessageBase)(nil), // 0: proto.ProtoMessageBase - (*ProtoMessage)(nil), // 1: proto.ProtoMessage - (*ProtoLatencyTracker)(nil), // 2: proto.ProtoLatencyTracker - (*ProtoMouseMove)(nil), // 3: proto.ProtoMouseMove - (*ProtoMouseMoveAbs)(nil), // 4: proto.ProtoMouseMoveAbs - (*ProtoMouseWheel)(nil), // 5: proto.ProtoMouseWheel - (*ProtoMouseKeyDown)(nil), // 6: proto.ProtoMouseKeyDown - (*ProtoMouseKeyUp)(nil), // 7: proto.ProtoMouseKeyUp - (*ProtoKeyDown)(nil), // 8: proto.ProtoKeyDown - (*ProtoKeyUp)(nil), // 9: proto.ProtoKeyUp - (*ProtoControllerAttach)(nil), // 10: proto.ProtoControllerAttach - (*ProtoControllerDetach)(nil), // 11: proto.ProtoControllerDetach - (*ProtoControllerRumble)(nil), // 12: proto.ProtoControllerRumble - (*ProtoControllerStateBatch)(nil), // 13: proto.ProtoControllerStateBatch - (*ProtoICE)(nil), // 14: proto.ProtoICE - (*ProtoSDP)(nil), // 15: proto.ProtoSDP - (*ProtoRaw)(nil), // 16: proto.ProtoRaw - (*ProtoClientRequestRoomStream)(nil), // 17: proto.ProtoClientRequestRoomStream - (*ProtoClientDisconnected)(nil), // 18: proto.ProtoClientDisconnected - (*ProtoServerPushStream)(nil), // 19: proto.ProtoServerPushStream -} -var file_messages_proto_depIdxs = []int32{ - 2, // 0: proto.ProtoMessageBase.latency:type_name -> proto.ProtoLatencyTracker - 0, // 1: proto.ProtoMessage.message_base:type_name -> proto.ProtoMessageBase - 3, // 2: proto.ProtoMessage.mouse_move:type_name -> proto.ProtoMouseMove - 4, // 3: proto.ProtoMessage.mouse_move_abs:type_name -> proto.ProtoMouseMoveAbs - 5, // 4: proto.ProtoMessage.mouse_wheel:type_name -> proto.ProtoMouseWheel - 6, // 5: proto.ProtoMessage.mouse_key_down:type_name -> proto.ProtoMouseKeyDown - 7, // 6: proto.ProtoMessage.mouse_key_up:type_name -> proto.ProtoMouseKeyUp - 8, // 7: proto.ProtoMessage.key_down:type_name -> proto.ProtoKeyDown - 9, // 8: proto.ProtoMessage.key_up:type_name -> proto.ProtoKeyUp - 10, // 9: proto.ProtoMessage.controller_attach:type_name -> proto.ProtoControllerAttach - 11, // 10: proto.ProtoMessage.controller_detach:type_name -> proto.ProtoControllerDetach - 12, // 11: proto.ProtoMessage.controller_rumble:type_name -> proto.ProtoControllerRumble - 13, // 12: proto.ProtoMessage.controller_state_batch:type_name -> proto.ProtoControllerStateBatch - 14, // 13: proto.ProtoMessage.ice:type_name -> proto.ProtoICE - 15, // 14: proto.ProtoMessage.sdp:type_name -> proto.ProtoSDP - 16, // 15: proto.ProtoMessage.raw:type_name -> proto.ProtoRaw - 17, // 16: proto.ProtoMessage.client_request_room_stream:type_name -> proto.ProtoClientRequestRoomStream - 18, // 17: proto.ProtoMessage.client_disconnected:type_name -> proto.ProtoClientDisconnected - 19, // 18: proto.ProtoMessage.server_push_stream:type_name -> proto.ProtoServerPushStream - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name -} - -func init() { file_messages_proto_init() } -func file_messages_proto_init() { - if File_messages_proto != nil { - return - } - file_types_proto_init() - file_latency_tracker_proto_init() - file_messages_proto_msgTypes[1].OneofWrappers = []any{ - (*ProtoMessage_MouseMove)(nil), - (*ProtoMessage_MouseMoveAbs)(nil), - (*ProtoMessage_MouseWheel)(nil), - (*ProtoMessage_MouseKeyDown)(nil), - (*ProtoMessage_MouseKeyUp)(nil), - (*ProtoMessage_KeyDown)(nil), - (*ProtoMessage_KeyUp)(nil), - (*ProtoMessage_ControllerAttach)(nil), - (*ProtoMessage_ControllerDetach)(nil), - (*ProtoMessage_ControllerRumble)(nil), - (*ProtoMessage_ControllerStateBatch)(nil), - (*ProtoMessage_Ice)(nil), - (*ProtoMessage_Sdp)(nil), - (*ProtoMessage_Raw)(nil), - (*ProtoMessage_ClientRequestRoomStream)(nil), - (*ProtoMessage_ClientDisconnected)(nil), - (*ProtoMessage_ServerPushStream)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_messages_proto_rawDesc), len(file_messages_proto_rawDesc)), - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_messages_proto_goTypes, - DependencyIndexes: file_messages_proto_depIdxs, - MessageInfos: file_messages_proto_msgTypes, - }.Build() - File_messages_proto = out.File - file_messages_proto_goTypes = nil - file_messages_proto_depIdxs = nil -} diff --git a/packages/relay/internal/proto/state.pb.go b/packages/relay/internal/proto/state.pb.go deleted file mode 100644 index 9c99eae1..00000000 --- a/packages/relay/internal/proto/state.pb.go +++ /dev/null @@ -1,151 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.6 -// protoc (unknown) -// source: state.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// EntityState represents the state of an entity in the mesh (e.g., a room). -type EntityState struct { - state protoimpl.MessageState `protogen:"open.v1"` - EntityType string `protobuf:"bytes,1,opt,name=entity_type,json=entityType,proto3" json:"entity_type,omitempty"` // Type of entity (e.g., "room") - EntityId string `protobuf:"bytes,2,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` // Unique identifier (e.g., room name) - Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"` // Whether the entity is active - OwnerRelayId string `protobuf:"bytes,4,opt,name=owner_relay_id,json=ownerRelayId,proto3" json:"owner_relay_id,omitempty"` // Relay ID that owns this entity - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *EntityState) Reset() { - *x = EntityState{} - mi := &file_state_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EntityState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityState) ProtoMessage() {} - -func (x *EntityState) ProtoReflect() protoreflect.Message { - mi := &file_state_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityState.ProtoReflect.Descriptor instead. -func (*EntityState) Descriptor() ([]byte, []int) { - return file_state_proto_rawDescGZIP(), []int{0} -} - -func (x *EntityState) GetEntityType() string { - if x != nil { - return x.EntityType - } - return "" -} - -func (x *EntityState) GetEntityId() string { - if x != nil { - return x.EntityId - } - return "" -} - -func (x *EntityState) GetActive() bool { - if x != nil { - return x.Active - } - return false -} - -func (x *EntityState) GetOwnerRelayId() string { - if x != nil { - return x.OwnerRelayId - } - return "" -} - -var File_state_proto protoreflect.FileDescriptor - -const file_state_proto_rawDesc = "" + - "\n" + - "\vstate.proto\x12\x05proto\"\x89\x01\n" + - "\vEntityState\x12\x1f\n" + - "\ventity_type\x18\x01 \x01(\tR\n" + - "entityType\x12\x1b\n" + - "\tentity_id\x18\x02 \x01(\tR\bentityId\x12\x16\n" + - "\x06active\x18\x03 \x01(\bR\x06active\x12$\n" + - "\x0eowner_relay_id\x18\x04 \x01(\tR\fownerRelayIdB\x16Z\x14relay/internal/protob\x06proto3" - -var ( - file_state_proto_rawDescOnce sync.Once - file_state_proto_rawDescData []byte -) - -func file_state_proto_rawDescGZIP() []byte { - file_state_proto_rawDescOnce.Do(func() { - file_state_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_state_proto_rawDesc), len(file_state_proto_rawDesc))) - }) - return file_state_proto_rawDescData -} - -var file_state_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_state_proto_goTypes = []any{ - (*EntityState)(nil), // 0: proto.EntityState -} -var file_state_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_state_proto_init() } -func file_state_proto_init() { - if File_state_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_state_proto_rawDesc), len(file_state_proto_rawDesc)), - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_state_proto_goTypes, - DependencyIndexes: file_state_proto_depIdxs, - MessageInfos: file_state_proto_msgTypes, - }.Build() - File_state_proto = out.File - file_state_proto_goTypes = nil - file_state_proto_depIdxs = nil -} diff --git a/packages/relay/internal/proto/types.pb.go b/packages/relay/internal/proto/types.pb.go deleted file mode 100644 index 917530d8..00000000 --- a/packages/relay/internal/proto/types.pb.go +++ /dev/null @@ -1,1338 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.10 -// protoc (unknown) -// source: types.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ProtoControllerStateBatch_UpdateType int32 - -const ( - ProtoControllerStateBatch_FULL_STATE ProtoControllerStateBatch_UpdateType = 0 // Complete controller state - ProtoControllerStateBatch_DELTA ProtoControllerStateBatch_UpdateType = 1 // Only changed fields -) - -// Enum value maps for ProtoControllerStateBatch_UpdateType. -var ( - ProtoControllerStateBatch_UpdateType_name = map[int32]string{ - 0: "FULL_STATE", - 1: "DELTA", - } - ProtoControllerStateBatch_UpdateType_value = map[string]int32{ - "FULL_STATE": 0, - "DELTA": 1, - } -) - -func (x ProtoControllerStateBatch_UpdateType) Enum() *ProtoControllerStateBatch_UpdateType { - p := new(ProtoControllerStateBatch_UpdateType) - *p = x - return p -} - -func (x ProtoControllerStateBatch_UpdateType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ProtoControllerStateBatch_UpdateType) Descriptor() protoreflect.EnumDescriptor { - return file_types_proto_enumTypes[0].Descriptor() -} - -func (ProtoControllerStateBatch_UpdateType) Type() protoreflect.EnumType { - return &file_types_proto_enumTypes[0] -} - -func (x ProtoControllerStateBatch_UpdateType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ProtoControllerStateBatch_UpdateType.Descriptor instead. -func (ProtoControllerStateBatch_UpdateType) EnumDescriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{10, 0} -} - -// MouseMove message -type ProtoMouseMove struct { - state protoimpl.MessageState `protogen:"open.v1"` - X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"` - Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMouseMove) Reset() { - *x = ProtoMouseMove{} - mi := &file_types_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMouseMove) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMouseMove) ProtoMessage() {} - -func (x *ProtoMouseMove) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMouseMove.ProtoReflect.Descriptor instead. -func (*ProtoMouseMove) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{0} -} - -func (x *ProtoMouseMove) GetX() int32 { - if x != nil { - return x.X - } - return 0 -} - -func (x *ProtoMouseMove) GetY() int32 { - if x != nil { - return x.Y - } - return 0 -} - -// MouseMoveAbs message -type ProtoMouseMoveAbs struct { - state protoimpl.MessageState `protogen:"open.v1"` - X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"` - Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMouseMoveAbs) Reset() { - *x = ProtoMouseMoveAbs{} - mi := &file_types_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMouseMoveAbs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMouseMoveAbs) ProtoMessage() {} - -func (x *ProtoMouseMoveAbs) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMouseMoveAbs.ProtoReflect.Descriptor instead. -func (*ProtoMouseMoveAbs) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{1} -} - -func (x *ProtoMouseMoveAbs) GetX() int32 { - if x != nil { - return x.X - } - return 0 -} - -func (x *ProtoMouseMoveAbs) GetY() int32 { - if x != nil { - return x.Y - } - return 0 -} - -// MouseWheel message -type ProtoMouseWheel struct { - state protoimpl.MessageState `protogen:"open.v1"` - X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"` - Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMouseWheel) Reset() { - *x = ProtoMouseWheel{} - mi := &file_types_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMouseWheel) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMouseWheel) ProtoMessage() {} - -func (x *ProtoMouseWheel) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMouseWheel.ProtoReflect.Descriptor instead. -func (*ProtoMouseWheel) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{2} -} - -func (x *ProtoMouseWheel) GetX() int32 { - if x != nil { - return x.X - } - return 0 -} - -func (x *ProtoMouseWheel) GetY() int32 { - if x != nil { - return x.Y - } - return 0 -} - -// MouseKeyDown message -type ProtoMouseKeyDown struct { - state protoimpl.MessageState `protogen:"open.v1"` - Key int32 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMouseKeyDown) Reset() { - *x = ProtoMouseKeyDown{} - mi := &file_types_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMouseKeyDown) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMouseKeyDown) ProtoMessage() {} - -func (x *ProtoMouseKeyDown) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMouseKeyDown.ProtoReflect.Descriptor instead. -func (*ProtoMouseKeyDown) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{3} -} - -func (x *ProtoMouseKeyDown) GetKey() int32 { - if x != nil { - return x.Key - } - return 0 -} - -// MouseKeyUp message -type ProtoMouseKeyUp struct { - state protoimpl.MessageState `protogen:"open.v1"` - Key int32 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoMouseKeyUp) Reset() { - *x = ProtoMouseKeyUp{} - mi := &file_types_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoMouseKeyUp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoMouseKeyUp) ProtoMessage() {} - -func (x *ProtoMouseKeyUp) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoMouseKeyUp.ProtoReflect.Descriptor instead. -func (*ProtoMouseKeyUp) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{4} -} - -func (x *ProtoMouseKeyUp) GetKey() int32 { - if x != nil { - return x.Key - } - return 0 -} - -// KeyDown message -type ProtoKeyDown struct { - state protoimpl.MessageState `protogen:"open.v1"` - Key int32 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoKeyDown) Reset() { - *x = ProtoKeyDown{} - mi := &file_types_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoKeyDown) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoKeyDown) ProtoMessage() {} - -func (x *ProtoKeyDown) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoKeyDown.ProtoReflect.Descriptor instead. -func (*ProtoKeyDown) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{5} -} - -func (x *ProtoKeyDown) GetKey() int32 { - if x != nil { - return x.Key - } - return 0 -} - -// KeyUp message -type ProtoKeyUp struct { - state protoimpl.MessageState `protogen:"open.v1"` - Key int32 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoKeyUp) Reset() { - *x = ProtoKeyUp{} - mi := &file_types_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoKeyUp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoKeyUp) ProtoMessage() {} - -func (x *ProtoKeyUp) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoKeyUp.ProtoReflect.Descriptor instead. -func (*ProtoKeyUp) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{6} -} - -func (x *ProtoKeyUp) GetKey() int32 { - if x != nil { - return x.Key - } - return 0 -} - -// ControllerAttach message -type ProtoControllerAttach struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // One of the following enums: "ps", "xbox" or "switch" - SessionSlot int32 `protobuf:"varint,2,opt,name=session_slot,json=sessionSlot,proto3" json:"session_slot,omitempty"` // Session specific slot number (0-3) - SessionId string `protobuf:"bytes,3,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // Session ID of the client - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoControllerAttach) Reset() { - *x = ProtoControllerAttach{} - mi := &file_types_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoControllerAttach) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoControllerAttach) ProtoMessage() {} - -func (x *ProtoControllerAttach) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoControllerAttach.ProtoReflect.Descriptor instead. -func (*ProtoControllerAttach) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{7} -} - -func (x *ProtoControllerAttach) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ProtoControllerAttach) GetSessionSlot() int32 { - if x != nil { - return x.SessionSlot - } - return 0 -} - -func (x *ProtoControllerAttach) GetSessionId() string { - if x != nil { - return x.SessionId - } - return "" -} - -// ControllerDetach message -type ProtoControllerDetach struct { - state protoimpl.MessageState `protogen:"open.v1"` - SessionSlot int32 `protobuf:"varint,1,opt,name=session_slot,json=sessionSlot,proto3" json:"session_slot,omitempty"` // Session specific slot number (0-3) - SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // Session ID of the client - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoControllerDetach) Reset() { - *x = ProtoControllerDetach{} - mi := &file_types_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoControllerDetach) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoControllerDetach) ProtoMessage() {} - -func (x *ProtoControllerDetach) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoControllerDetach.ProtoReflect.Descriptor instead. -func (*ProtoControllerDetach) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{8} -} - -func (x *ProtoControllerDetach) GetSessionSlot() int32 { - if x != nil { - return x.SessionSlot - } - return 0 -} - -func (x *ProtoControllerDetach) GetSessionId() string { - if x != nil { - return x.SessionId - } - return "" -} - -// ControllerRumble message -type ProtoControllerRumble struct { - state protoimpl.MessageState `protogen:"open.v1"` - SessionSlot int32 `protobuf:"varint,1,opt,name=session_slot,json=sessionSlot,proto3" json:"session_slot,omitempty"` // Session specific slot number (0-3) - SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // Session ID of the client - LowFrequency int32 `protobuf:"varint,3,opt,name=low_frequency,json=lowFrequency,proto3" json:"low_frequency,omitempty"` // Low frequency rumble (0-65535) - HighFrequency int32 `protobuf:"varint,4,opt,name=high_frequency,json=highFrequency,proto3" json:"high_frequency,omitempty"` // High frequency rumble (0-65535) - Duration int32 `protobuf:"varint,5,opt,name=duration,proto3" json:"duration,omitempty"` // Duration in milliseconds - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoControllerRumble) Reset() { - *x = ProtoControllerRumble{} - mi := &file_types_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoControllerRumble) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoControllerRumble) ProtoMessage() {} - -func (x *ProtoControllerRumble) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoControllerRumble.ProtoReflect.Descriptor instead. -func (*ProtoControllerRumble) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{9} -} - -func (x *ProtoControllerRumble) GetSessionSlot() int32 { - if x != nil { - return x.SessionSlot - } - return 0 -} - -func (x *ProtoControllerRumble) GetSessionId() string { - if x != nil { - return x.SessionId - } - return "" -} - -func (x *ProtoControllerRumble) GetLowFrequency() int32 { - if x != nil { - return x.LowFrequency - } - return 0 -} - -func (x *ProtoControllerRumble) GetHighFrequency() int32 { - if x != nil { - return x.HighFrequency - } - return 0 -} - -func (x *ProtoControllerRumble) GetDuration() int32 { - if x != nil { - return x.Duration - } - return 0 -} - -// ControllerStateBatch - single message containing full or partial controller state -type ProtoControllerStateBatch struct { - state protoimpl.MessageState `protogen:"open.v1"` - SessionSlot int32 `protobuf:"varint,1,opt,name=session_slot,json=sessionSlot,proto3" json:"session_slot,omitempty"` // Session specific slot number (0-3) - SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // Session ID of the client - UpdateType ProtoControllerStateBatch_UpdateType `protobuf:"varint,3,opt,name=update_type,json=updateType,proto3,enum=proto.ProtoControllerStateBatch_UpdateType" json:"update_type,omitempty"` - // Sequence number for packet loss detection - Sequence uint32 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` - // Button state map (Linux event codes) - ButtonChangedMask map[int32]bool `protobuf:"bytes,5,rep,name=button_changed_mask,json=buttonChangedMask,proto3" json:"button_changed_mask,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - // Analog inputs - LeftStickX *int32 `protobuf:"varint,6,opt,name=left_stick_x,json=leftStickX,proto3,oneof" json:"left_stick_x,omitempty"` // -32768 to 32767 - LeftStickY *int32 `protobuf:"varint,7,opt,name=left_stick_y,json=leftStickY,proto3,oneof" json:"left_stick_y,omitempty"` // -32768 to 32767 - RightStickX *int32 `protobuf:"varint,8,opt,name=right_stick_x,json=rightStickX,proto3,oneof" json:"right_stick_x,omitempty"` // -32768 to 32767 - RightStickY *int32 `protobuf:"varint,9,opt,name=right_stick_y,json=rightStickY,proto3,oneof" json:"right_stick_y,omitempty"` // -32768 to 32767 - LeftTrigger *int32 `protobuf:"varint,10,opt,name=left_trigger,json=leftTrigger,proto3,oneof" json:"left_trigger,omitempty"` // -32768 to 32767 - RightTrigger *int32 `protobuf:"varint,11,opt,name=right_trigger,json=rightTrigger,proto3,oneof" json:"right_trigger,omitempty"` // -32768 to 32767 - DpadX *int32 `protobuf:"varint,12,opt,name=dpad_x,json=dpadX,proto3,oneof" json:"dpad_x,omitempty"` // -1, 0, or 1 - DpadY *int32 `protobuf:"varint,13,opt,name=dpad_y,json=dpadY,proto3,oneof" json:"dpad_y,omitempty"` // -1, 0, or 1 - // Bitmask indicating which fields have changed - // Bit 0: button_changed_mask, Bit 1: left_stick_x, Bit 2: left_stick_y, etc. - ChangedFields *uint32 `protobuf:"varint,14,opt,name=changed_fields,json=changedFields,proto3,oneof" json:"changed_fields,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoControllerStateBatch) Reset() { - *x = ProtoControllerStateBatch{} - mi := &file_types_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoControllerStateBatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoControllerStateBatch) ProtoMessage() {} - -func (x *ProtoControllerStateBatch) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoControllerStateBatch.ProtoReflect.Descriptor instead. -func (*ProtoControllerStateBatch) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{10} -} - -func (x *ProtoControllerStateBatch) GetSessionSlot() int32 { - if x != nil { - return x.SessionSlot - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetSessionId() string { - if x != nil { - return x.SessionId - } - return "" -} - -func (x *ProtoControllerStateBatch) GetUpdateType() ProtoControllerStateBatch_UpdateType { - if x != nil { - return x.UpdateType - } - return ProtoControllerStateBatch_FULL_STATE -} - -func (x *ProtoControllerStateBatch) GetSequence() uint32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetButtonChangedMask() map[int32]bool { - if x != nil { - return x.ButtonChangedMask - } - return nil -} - -func (x *ProtoControllerStateBatch) GetLeftStickX() int32 { - if x != nil && x.LeftStickX != nil { - return *x.LeftStickX - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetLeftStickY() int32 { - if x != nil && x.LeftStickY != nil { - return *x.LeftStickY - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetRightStickX() int32 { - if x != nil && x.RightStickX != nil { - return *x.RightStickX - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetRightStickY() int32 { - if x != nil && x.RightStickY != nil { - return *x.RightStickY - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetLeftTrigger() int32 { - if x != nil && x.LeftTrigger != nil { - return *x.LeftTrigger - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetRightTrigger() int32 { - if x != nil && x.RightTrigger != nil { - return *x.RightTrigger - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetDpadX() int32 { - if x != nil && x.DpadX != nil { - return *x.DpadX - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetDpadY() int32 { - if x != nil && x.DpadY != nil { - return *x.DpadY - } - return 0 -} - -func (x *ProtoControllerStateBatch) GetChangedFields() uint32 { - if x != nil && x.ChangedFields != nil { - return *x.ChangedFields - } - return 0 -} - -type RTCIceCandidateInit struct { - state protoimpl.MessageState `protogen:"open.v1"` - Candidate string `protobuf:"bytes,1,opt,name=candidate,proto3" json:"candidate,omitempty"` - SdpMLineIndex *uint32 `protobuf:"varint,2,opt,name=sdpMLineIndex,proto3,oneof" json:"sdpMLineIndex,omitempty"` - SdpMid *string `protobuf:"bytes,3,opt,name=sdpMid,proto3,oneof" json:"sdpMid,omitempty"` - UsernameFragment *string `protobuf:"bytes,4,opt,name=usernameFragment,proto3,oneof" json:"usernameFragment,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *RTCIceCandidateInit) Reset() { - *x = RTCIceCandidateInit{} - mi := &file_types_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RTCIceCandidateInit) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RTCIceCandidateInit) ProtoMessage() {} - -func (x *RTCIceCandidateInit) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RTCIceCandidateInit.ProtoReflect.Descriptor instead. -func (*RTCIceCandidateInit) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{11} -} - -func (x *RTCIceCandidateInit) GetCandidate() string { - if x != nil { - return x.Candidate - } - return "" -} - -func (x *RTCIceCandidateInit) GetSdpMLineIndex() uint32 { - if x != nil && x.SdpMLineIndex != nil { - return *x.SdpMLineIndex - } - return 0 -} - -func (x *RTCIceCandidateInit) GetSdpMid() string { - if x != nil && x.SdpMid != nil { - return *x.SdpMid - } - return "" -} - -func (x *RTCIceCandidateInit) GetUsernameFragment() string { - if x != nil && x.UsernameFragment != nil { - return *x.UsernameFragment - } - return "" -} - -type RTCSessionDescriptionInit struct { - state protoimpl.MessageState `protogen:"open.v1"` - Sdp string `protobuf:"bytes,1,opt,name=sdp,proto3" json:"sdp,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *RTCSessionDescriptionInit) Reset() { - *x = RTCSessionDescriptionInit{} - mi := &file_types_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RTCSessionDescriptionInit) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RTCSessionDescriptionInit) ProtoMessage() {} - -func (x *RTCSessionDescriptionInit) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RTCSessionDescriptionInit.ProtoReflect.Descriptor instead. -func (*RTCSessionDescriptionInit) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{12} -} - -func (x *RTCSessionDescriptionInit) GetSdp() string { - if x != nil { - return x.Sdp - } - return "" -} - -func (x *RTCSessionDescriptionInit) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -// ProtoICE message -type ProtoICE struct { - state protoimpl.MessageState `protogen:"open.v1"` - Candidate *RTCIceCandidateInit `protobuf:"bytes,1,opt,name=candidate,proto3" json:"candidate,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoICE) Reset() { - *x = ProtoICE{} - mi := &file_types_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoICE) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoICE) ProtoMessage() {} - -func (x *ProtoICE) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoICE.ProtoReflect.Descriptor instead. -func (*ProtoICE) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{13} -} - -func (x *ProtoICE) GetCandidate() *RTCIceCandidateInit { - if x != nil { - return x.Candidate - } - return nil -} - -// ProtoSDP message -type ProtoSDP struct { - state protoimpl.MessageState `protogen:"open.v1"` - Sdp *RTCSessionDescriptionInit `protobuf:"bytes,1,opt,name=sdp,proto3" json:"sdp,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoSDP) Reset() { - *x = ProtoSDP{} - mi := &file_types_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoSDP) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoSDP) ProtoMessage() {} - -func (x *ProtoSDP) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoSDP.ProtoReflect.Descriptor instead. -func (*ProtoSDP) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{14} -} - -func (x *ProtoSDP) GetSdp() *RTCSessionDescriptionInit { - if x != nil { - return x.Sdp - } - return nil -} - -// ProtoRaw message -type ProtoRaw struct { - state protoimpl.MessageState `protogen:"open.v1"` - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoRaw) Reset() { - *x = ProtoRaw{} - mi := &file_types_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoRaw) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoRaw) ProtoMessage() {} - -func (x *ProtoRaw) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoRaw.ProtoReflect.Descriptor instead. -func (*ProtoRaw) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{15} -} - -func (x *ProtoRaw) GetData() string { - if x != nil { - return x.Data - } - return "" -} - -// ProtoClientRequestRoomStream message -type ProtoClientRequestRoomStream struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoClientRequestRoomStream) Reset() { - *x = ProtoClientRequestRoomStream{} - mi := &file_types_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoClientRequestRoomStream) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoClientRequestRoomStream) ProtoMessage() {} - -func (x *ProtoClientRequestRoomStream) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoClientRequestRoomStream.ProtoReflect.Descriptor instead. -func (*ProtoClientRequestRoomStream) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{16} -} - -func (x *ProtoClientRequestRoomStream) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -func (x *ProtoClientRequestRoomStream) GetSessionId() string { - if x != nil { - return x.SessionId - } - return "" -} - -// ProtoClientDisconnected message -type ProtoClientDisconnected struct { - state protoimpl.MessageState `protogen:"open.v1"` - SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - ControllerSlots []int32 `protobuf:"varint,2,rep,packed,name=controller_slots,json=controllerSlots,proto3" json:"controller_slots,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoClientDisconnected) Reset() { - *x = ProtoClientDisconnected{} - mi := &file_types_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoClientDisconnected) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoClientDisconnected) ProtoMessage() {} - -func (x *ProtoClientDisconnected) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoClientDisconnected.ProtoReflect.Descriptor instead. -func (*ProtoClientDisconnected) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{17} -} - -func (x *ProtoClientDisconnected) GetSessionId() string { - if x != nil { - return x.SessionId - } - return "" -} - -func (x *ProtoClientDisconnected) GetControllerSlots() []int32 { - if x != nil { - return x.ControllerSlots - } - return nil -} - -// ProtoServerPushStream message -type ProtoServerPushStream struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProtoServerPushStream) Reset() { - *x = ProtoServerPushStream{} - mi := &file_types_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProtoServerPushStream) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProtoServerPushStream) ProtoMessage() {} - -func (x *ProtoServerPushStream) ProtoReflect() protoreflect.Message { - mi := &file_types_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProtoServerPushStream.ProtoReflect.Descriptor instead. -func (*ProtoServerPushStream) Descriptor() ([]byte, []int) { - return file_types_proto_rawDescGZIP(), []int{18} -} - -func (x *ProtoServerPushStream) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -var File_types_proto protoreflect.FileDescriptor - -const file_types_proto_rawDesc = "" + - "\n" + - "\vtypes.proto\x12\x05proto\",\n" + - "\x0eProtoMouseMove\x12\f\n" + - "\x01x\x18\x01 \x01(\x05R\x01x\x12\f\n" + - "\x01y\x18\x02 \x01(\x05R\x01y\"/\n" + - "\x11ProtoMouseMoveAbs\x12\f\n" + - "\x01x\x18\x01 \x01(\x05R\x01x\x12\f\n" + - "\x01y\x18\x02 \x01(\x05R\x01y\"-\n" + - "\x0fProtoMouseWheel\x12\f\n" + - "\x01x\x18\x01 \x01(\x05R\x01x\x12\f\n" + - "\x01y\x18\x02 \x01(\x05R\x01y\"%\n" + - "\x11ProtoMouseKeyDown\x12\x10\n" + - "\x03key\x18\x01 \x01(\x05R\x03key\"#\n" + - "\x0fProtoMouseKeyUp\x12\x10\n" + - "\x03key\x18\x01 \x01(\x05R\x03key\" \n" + - "\fProtoKeyDown\x12\x10\n" + - "\x03key\x18\x01 \x01(\x05R\x03key\"\x1e\n" + - "\n" + - "ProtoKeyUp\x12\x10\n" + - "\x03key\x18\x01 \x01(\x05R\x03key\"i\n" + - "\x15ProtoControllerAttach\x12\x0e\n" + - "\x02id\x18\x01 \x01(\tR\x02id\x12!\n" + - "\fsession_slot\x18\x02 \x01(\x05R\vsessionSlot\x12\x1d\n" + - "\n" + - "session_id\x18\x03 \x01(\tR\tsessionId\"Y\n" + - "\x15ProtoControllerDetach\x12!\n" + - "\fsession_slot\x18\x01 \x01(\x05R\vsessionSlot\x12\x1d\n" + - "\n" + - "session_id\x18\x02 \x01(\tR\tsessionId\"\xc1\x01\n" + - "\x15ProtoControllerRumble\x12!\n" + - "\fsession_slot\x18\x01 \x01(\x05R\vsessionSlot\x12\x1d\n" + - "\n" + - "session_id\x18\x02 \x01(\tR\tsessionId\x12#\n" + - "\rlow_frequency\x18\x03 \x01(\x05R\flowFrequency\x12%\n" + - "\x0ehigh_frequency\x18\x04 \x01(\x05R\rhighFrequency\x12\x1a\n" + - "\bduration\x18\x05 \x01(\x05R\bduration\"\x87\a\n" + - "\x19ProtoControllerStateBatch\x12!\n" + - "\fsession_slot\x18\x01 \x01(\x05R\vsessionSlot\x12\x1d\n" + - "\n" + - "session_id\x18\x02 \x01(\tR\tsessionId\x12L\n" + - "\vupdate_type\x18\x03 \x01(\x0e2+.proto.ProtoControllerStateBatch.UpdateTypeR\n" + - "updateType\x12\x1a\n" + - "\bsequence\x18\x04 \x01(\rR\bsequence\x12g\n" + - "\x13button_changed_mask\x18\x05 \x03(\v27.proto.ProtoControllerStateBatch.ButtonChangedMaskEntryR\x11buttonChangedMask\x12%\n" + - "\fleft_stick_x\x18\x06 \x01(\x05H\x00R\n" + - "leftStickX\x88\x01\x01\x12%\n" + - "\fleft_stick_y\x18\a \x01(\x05H\x01R\n" + - "leftStickY\x88\x01\x01\x12'\n" + - "\rright_stick_x\x18\b \x01(\x05H\x02R\vrightStickX\x88\x01\x01\x12'\n" + - "\rright_stick_y\x18\t \x01(\x05H\x03R\vrightStickY\x88\x01\x01\x12&\n" + - "\fleft_trigger\x18\n" + - " \x01(\x05H\x04R\vleftTrigger\x88\x01\x01\x12(\n" + - "\rright_trigger\x18\v \x01(\x05H\x05R\frightTrigger\x88\x01\x01\x12\x1a\n" + - "\x06dpad_x\x18\f \x01(\x05H\x06R\x05dpadX\x88\x01\x01\x12\x1a\n" + - "\x06dpad_y\x18\r \x01(\x05H\aR\x05dpadY\x88\x01\x01\x12*\n" + - "\x0echanged_fields\x18\x0e \x01(\rH\bR\rchangedFields\x88\x01\x01\x1aD\n" + - "\x16ButtonChangedMaskEntry\x12\x10\n" + - "\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\bR\x05value:\x028\x01\"'\n" + - "\n" + - "UpdateType\x12\x0e\n" + - "\n" + - "FULL_STATE\x10\x00\x12\t\n" + - "\x05DELTA\x10\x01B\x0f\n" + - "\r_left_stick_xB\x0f\n" + - "\r_left_stick_yB\x10\n" + - "\x0e_right_stick_xB\x10\n" + - "\x0e_right_stick_yB\x0f\n" + - "\r_left_triggerB\x10\n" + - "\x0e_right_triggerB\t\n" + - "\a_dpad_xB\t\n" + - "\a_dpad_yB\x11\n" + - "\x0f_changed_fields\"\xde\x01\n" + - "\x13RTCIceCandidateInit\x12\x1c\n" + - "\tcandidate\x18\x01 \x01(\tR\tcandidate\x12)\n" + - "\rsdpMLineIndex\x18\x02 \x01(\rH\x00R\rsdpMLineIndex\x88\x01\x01\x12\x1b\n" + - "\x06sdpMid\x18\x03 \x01(\tH\x01R\x06sdpMid\x88\x01\x01\x12/\n" + - "\x10usernameFragment\x18\x04 \x01(\tH\x02R\x10usernameFragment\x88\x01\x01B\x10\n" + - "\x0e_sdpMLineIndexB\t\n" + - "\a_sdpMidB\x13\n" + - "\x11_usernameFragment\"A\n" + - "\x19RTCSessionDescriptionInit\x12\x10\n" + - "\x03sdp\x18\x01 \x01(\tR\x03sdp\x12\x12\n" + - "\x04type\x18\x02 \x01(\tR\x04type\"D\n" + - "\bProtoICE\x128\n" + - "\tcandidate\x18\x01 \x01(\v2\x1a.proto.RTCIceCandidateInitR\tcandidate\">\n" + - "\bProtoSDP\x122\n" + - "\x03sdp\x18\x01 \x01(\v2 .proto.RTCSessionDescriptionInitR\x03sdp\"\x1e\n" + - "\bProtoRaw\x12\x12\n" + - "\x04data\x18\x01 \x01(\tR\x04data\"Z\n" + - "\x1cProtoClientRequestRoomStream\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x12\x1d\n" + - "\n" + - "session_id\x18\x02 \x01(\tR\tsessionId\"c\n" + - "\x17ProtoClientDisconnected\x12\x1d\n" + - "\n" + - "session_id\x18\x01 \x01(\tR\tsessionId\x12)\n" + - "\x10controller_slots\x18\x02 \x03(\x05R\x0fcontrollerSlots\"4\n" + - "\x15ProtoServerPushStream\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomNameB\x16Z\x14relay/internal/protob\x06proto3" - -var ( - file_types_proto_rawDescOnce sync.Once - file_types_proto_rawDescData []byte -) - -func file_types_proto_rawDescGZIP() []byte { - file_types_proto_rawDescOnce.Do(func() { - file_types_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_types_proto_rawDesc), len(file_types_proto_rawDesc))) - }) - return file_types_proto_rawDescData -} - -var file_types_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_types_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_types_proto_goTypes = []any{ - (ProtoControllerStateBatch_UpdateType)(0), // 0: proto.ProtoControllerStateBatch.UpdateType - (*ProtoMouseMove)(nil), // 1: proto.ProtoMouseMove - (*ProtoMouseMoveAbs)(nil), // 2: proto.ProtoMouseMoveAbs - (*ProtoMouseWheel)(nil), // 3: proto.ProtoMouseWheel - (*ProtoMouseKeyDown)(nil), // 4: proto.ProtoMouseKeyDown - (*ProtoMouseKeyUp)(nil), // 5: proto.ProtoMouseKeyUp - (*ProtoKeyDown)(nil), // 6: proto.ProtoKeyDown - (*ProtoKeyUp)(nil), // 7: proto.ProtoKeyUp - (*ProtoControllerAttach)(nil), // 8: proto.ProtoControllerAttach - (*ProtoControllerDetach)(nil), // 9: proto.ProtoControllerDetach - (*ProtoControllerRumble)(nil), // 10: proto.ProtoControllerRumble - (*ProtoControllerStateBatch)(nil), // 11: proto.ProtoControllerStateBatch - (*RTCIceCandidateInit)(nil), // 12: proto.RTCIceCandidateInit - (*RTCSessionDescriptionInit)(nil), // 13: proto.RTCSessionDescriptionInit - (*ProtoICE)(nil), // 14: proto.ProtoICE - (*ProtoSDP)(nil), // 15: proto.ProtoSDP - (*ProtoRaw)(nil), // 16: proto.ProtoRaw - (*ProtoClientRequestRoomStream)(nil), // 17: proto.ProtoClientRequestRoomStream - (*ProtoClientDisconnected)(nil), // 18: proto.ProtoClientDisconnected - (*ProtoServerPushStream)(nil), // 19: proto.ProtoServerPushStream - nil, // 20: proto.ProtoControllerStateBatch.ButtonChangedMaskEntry -} -var file_types_proto_depIdxs = []int32{ - 0, // 0: proto.ProtoControllerStateBatch.update_type:type_name -> proto.ProtoControllerStateBatch.UpdateType - 20, // 1: proto.ProtoControllerStateBatch.button_changed_mask:type_name -> proto.ProtoControllerStateBatch.ButtonChangedMaskEntry - 12, // 2: proto.ProtoICE.candidate:type_name -> proto.RTCIceCandidateInit - 13, // 3: proto.ProtoSDP.sdp:type_name -> proto.RTCSessionDescriptionInit - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_types_proto_init() } -func file_types_proto_init() { - if File_types_proto != nil { - return - } - file_types_proto_msgTypes[10].OneofWrappers = []any{} - file_types_proto_msgTypes[11].OneofWrappers = []any{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_types_proto_rawDesc), len(file_types_proto_rawDesc)), - NumEnums: 1, - NumMessages: 20, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_types_proto_goTypes, - DependencyIndexes: file_types_proto_depIdxs, - EnumInfos: file_types_proto_enumTypes, - MessageInfos: file_types_proto_msgTypes, - }.Build() - File_types_proto = out.File - file_types_proto_goTypes = nil - file_types_proto_depIdxs = nil -} diff --git a/packages/relay/internal/proto/webrtc.pb.go b/packages/relay/internal/proto/webrtc.pb.go deleted file mode 100644 index 349d0c1a..00000000 --- a/packages/relay/internal/proto/webrtc.pb.go +++ /dev/null @@ -1,154 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.6 -// protoc (unknown) -// source: webrtc.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ICECandidateInit struct { - state protoimpl.MessageState `protogen:"open.v1"` - Candidate string `protobuf:"bytes,1,opt,name=candidate,proto3" json:"candidate,omitempty"` - SdpMid *string `protobuf:"bytes,2,opt,name=sdp_mid,json=sdpMid,proto3,oneof" json:"sdp_mid,omitempty"` - SdpMLineIndex *uint32 `protobuf:"varint,3,opt,name=sdp_m_line_index,json=sdpMLineIndex,proto3,oneof" json:"sdp_m_line_index,omitempty"` - UsernameFragment *string `protobuf:"bytes,4,opt,name=username_fragment,json=usernameFragment,proto3,oneof" json:"username_fragment,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ICECandidateInit) Reset() { - *x = ICECandidateInit{} - mi := &file_webrtc_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ICECandidateInit) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ICECandidateInit) ProtoMessage() {} - -func (x *ICECandidateInit) ProtoReflect() protoreflect.Message { - mi := &file_webrtc_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ICECandidateInit.ProtoReflect.Descriptor instead. -func (*ICECandidateInit) Descriptor() ([]byte, []int) { - return file_webrtc_proto_rawDescGZIP(), []int{0} -} - -func (x *ICECandidateInit) GetCandidate() string { - if x != nil { - return x.Candidate - } - return "" -} - -func (x *ICECandidateInit) GetSdpMid() string { - if x != nil && x.SdpMid != nil { - return *x.SdpMid - } - return "" -} - -func (x *ICECandidateInit) GetSdpMLineIndex() uint32 { - if x != nil && x.SdpMLineIndex != nil { - return *x.SdpMLineIndex - } - return 0 -} - -func (x *ICECandidateInit) GetUsernameFragment() string { - if x != nil && x.UsernameFragment != nil { - return *x.UsernameFragment - } - return "" -} - -var File_webrtc_proto protoreflect.FileDescriptor - -const file_webrtc_proto_rawDesc = "" + - "\n" + - "\fwebrtc.proto\x12\x05proto\"\xe5\x01\n" + - "\x10ICECandidateInit\x12\x1c\n" + - "\tcandidate\x18\x01 \x01(\tR\tcandidate\x12\x1c\n" + - "\asdp_mid\x18\x02 \x01(\tH\x00R\x06sdpMid\x88\x01\x01\x12,\n" + - "\x10sdp_m_line_index\x18\x03 \x01(\rH\x01R\rsdpMLineIndex\x88\x01\x01\x120\n" + - "\x11username_fragment\x18\x04 \x01(\tH\x02R\x10usernameFragment\x88\x01\x01B\n" + - "\n" + - "\b_sdp_midB\x13\n" + - "\x11_sdp_m_line_indexB\x14\n" + - "\x12_username_fragmentB\x16Z\x14relay/internal/protob\x06proto3" - -var ( - file_webrtc_proto_rawDescOnce sync.Once - file_webrtc_proto_rawDescData []byte -) - -func file_webrtc_proto_rawDescGZIP() []byte { - file_webrtc_proto_rawDescOnce.Do(func() { - file_webrtc_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_webrtc_proto_rawDesc), len(file_webrtc_proto_rawDesc))) - }) - return file_webrtc_proto_rawDescData -} - -var file_webrtc_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_webrtc_proto_goTypes = []any{ - (*ICECandidateInit)(nil), // 0: proto.ICECandidateInit -} -var file_webrtc_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_webrtc_proto_init() } -func file_webrtc_proto_init() { - if File_webrtc_proto != nil { - return - } - file_webrtc_proto_msgTypes[0].OneofWrappers = []any{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_webrtc_proto_rawDesc), len(file_webrtc_proto_rawDesc)), - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_webrtc_proto_goTypes, - DependencyIndexes: file_webrtc_proto_depIdxs, - MessageInfos: file_webrtc_proto_msgTypes, - }.Build() - File_webrtc_proto = out.File - file_webrtc_proto_goTypes = nil - file_webrtc_proto_depIdxs = nil -} diff --git a/packages/relay/internal/shared/participant.go b/packages/relay/internal/shared/participant.go deleted file mode 100644 index 3f4f5ccb..00000000 --- a/packages/relay/internal/shared/participant.go +++ /dev/null @@ -1,126 +0,0 @@ -package shared - -import ( - "errors" - "fmt" - "io" - "log/slog" - "relay/internal/common" - "relay/internal/connections" - "sync" - - "github.com/libp2p/go-libp2p/core/peer" - "github.com/oklog/ulid/v2" - "github.com/pion/webrtc/v4" -) - -type Participant struct { - ID ulid.ULID - SessionID string // Track session for reconnection - PeerID peer.ID // libp2p peer ID - PeerConnection *webrtc.PeerConnection - DataChannel *connections.NestriDataChannel - - // Per-viewer tracks and channels - VideoTrack *webrtc.TrackLocalStaticRTP - AudioTrack *webrtc.TrackLocalStaticRTP - - // Per-viewer RTP state for retiming - VideoSequenceNumber uint16 - VideoTimestamp uint32 - AudioSequenceNumber uint16 - AudioTimestamp uint32 - - packetQueue chan *participantPacket - closeOnce sync.Once -} - -func NewParticipant(sessionID string, peerID peer.ID) (*Participant, error) { - id, err := common.NewULID() - if err != nil { - return nil, fmt.Errorf("failed to create ULID for Participant: %w", err) - } - p := &Participant{ - ID: id, - SessionID: sessionID, - PeerID: peerID, - VideoSequenceNumber: 0, - VideoTimestamp: 0, - AudioSequenceNumber: 0, - AudioTimestamp: 0, - packetQueue: make(chan *participantPacket, 1000), - } - - go p.packetWriter() - - return p, nil -} - -// SetTrack sets audio/video track for Participant -func (p *Participant) SetTrack(trackType webrtc.RTPCodecType, track *webrtc.TrackLocalStaticRTP) { - switch trackType { - case webrtc.RTPCodecTypeAudio: - p.AudioTrack = track - _, err := p.PeerConnection.AddTrack(track) - if err != nil { - slog.Error("Failed to add audio track", "participant", p.ID, "err", err) - } - case webrtc.RTPCodecTypeVideo: - p.VideoTrack = track - _, err := p.PeerConnection.AddTrack(track) - if err != nil { - slog.Error("Failed to add video track", "participant", p.ID, "err", err) - } - default: - slog.Warn("Unknown track type", "participant", p.ID, "trackType", trackType) - } -} - -// Close cleans up participant resources -func (p *Participant) Close() { - p.closeOnce.Do(func() { - close(p.packetQueue) - }) - if p.DataChannel != nil { - err := p.DataChannel.Close() - if err != nil { - slog.Error("Failed to close DataChannel", "participant", p.ID, "err", err) - } - p.DataChannel = nil - } - if p.PeerConnection != nil { - err := p.PeerConnection.Close() - if err != nil { - slog.Error("Failed to close PeerConnection", "participant", p.ID, "err", err) - } - p.PeerConnection = nil - } - if p.VideoTrack != nil { - p.VideoTrack = nil - } - if p.AudioTrack != nil { - p.AudioTrack = nil - } -} - -func (p *Participant) packetWriter() { - for pkt := range p.packetQueue { - var track *webrtc.TrackLocalStaticRTP - - // No mutex needed - only this goroutine modifies these - if pkt.kind == webrtc.RTPCodecTypeAudio { - track = p.AudioTrack - } else { - track = p.VideoTrack - } - - if track != nil { - if err := track.WriteRTP(pkt.packet); err != nil && !errors.Is(err, io.ErrClosedPipe) { - slog.Error("WriteRTP failed", "participant", p.ID, "kind", pkt.kind, "err", err) - } - } - - // Return packet struct to pool - participantPacketPool.Put(pkt) - } -} diff --git a/packages/relay/internal/shared/room.go b/packages/relay/internal/shared/room.go deleted file mode 100644 index c7579c27..00000000 --- a/packages/relay/internal/shared/room.go +++ /dev/null @@ -1,167 +0,0 @@ -package shared - -import ( - "log/slog" - "relay/internal/connections" - "sync" - "sync/atomic" - - "github.com/libp2p/go-libp2p/core/peer" - "github.com/oklog/ulid/v2" - "github.com/pion/rtp" - "github.com/pion/webrtc/v4" -) - -var participantPacketPool = sync.Pool{ - New: func() interface{} { - return &participantPacket{} - }, -} - -type participantPacket struct { - kind webrtc.RTPCodecType - packet *rtp.Packet -} - -type RoomInfo struct { - ID ulid.ULID `json:"id"` - Name string `json:"name"` - OwnerID peer.ID `json:"owner_id"` -} - -type Room struct { - RoomInfo - AudioCodec webrtc.RTPCodecCapability - VideoCodec webrtc.RTPCodecCapability - PeerConnection *webrtc.PeerConnection - DataChannel *connections.NestriDataChannel - - // Atomic pointer to slice of participant channels - participantChannels atomic.Pointer[[]chan<- *participantPacket] - participantsMtx sync.Mutex // Use only for add/remove - - Participants map[ulid.ULID]*Participant // Keep general track of Participant(s) - - // Track last seen values to calculate diffs - LastVideoTimestamp uint32 - LastVideoSequenceNumber uint16 - LastAudioTimestamp uint32 - LastAudioSequenceNumber uint16 - - VideoTimestampSet bool - VideoSequenceSet bool - AudioTimestampSet bool - AudioSequenceSet bool -} - -func NewRoom(name string, roomID ulid.ULID, ownerID peer.ID) *Room { - r := &Room{ - RoomInfo: RoomInfo{ - ID: roomID, - Name: name, - OwnerID: ownerID, - }, - PeerConnection: nil, - DataChannel: nil, - Participants: make(map[ulid.ULID]*Participant), - } - - emptyChannels := make([]chan<- *participantPacket, 0) - r.participantChannels.Store(&emptyChannels) - - return r -} - -// Close closes up Room (stream ended) -func (r *Room) Close() { - if r.DataChannel != nil { - err := r.DataChannel.Close() - if err != nil { - slog.Error("Failed to close Room DataChannel", err) - } - r.DataChannel = nil - } - if r.PeerConnection != nil { - err := r.PeerConnection.Close() - if err != nil { - slog.Error("Failed to close Room PeerConnection", err) - } - r.PeerConnection = nil - } -} - -// AddParticipant adds a Participant to a Room -func (r *Room) AddParticipant(participant *Participant) { - r.participantsMtx.Lock() - defer r.participantsMtx.Unlock() - - r.Participants[participant.ID] = participant - - // Update channel slice atomically - current := r.participantChannels.Load() - newChannels := make([]chan<- *participantPacket, len(*current)+1) - copy(newChannels, *current) - newChannels[len(*current)] = participant.packetQueue - - r.participantChannels.Store(&newChannels) - - slog.Debug("Added participant", "participant", participant.ID, "room", r.Name) -} - -// RemoveParticipantByID removes a Participant from a Room by participant's ID -func (r *Room) RemoveParticipantByID(pID ulid.ULID) { - r.participantsMtx.Lock() - defer r.participantsMtx.Unlock() - - participant, ok := r.Participants[pID] - if !ok { - return - } - - delete(r.Participants, pID) - - // Update channel slice - current := r.participantChannels.Load() - newChannels := make([]chan<- *participantPacket, 0, len(*current)-1) - for _, ch := range *current { - if ch != participant.packetQueue { - newChannels = append(newChannels, ch) - } - } - - r.participantChannels.Store(&newChannels) - - slog.Debug("Removed participant", "participant", pID, "room", r.Name) -} - -// IsOnline checks if the room is online -func (r *Room) IsOnline() bool { - return r.PeerConnection != nil -} - -func (r *Room) BroadcastPacket(kind webrtc.RTPCodecType, pkt *rtp.Packet) { - // Lock-free load of channel slice - channels := r.participantChannels.Load() - - // no participants.. - if len(*channels) == 0 { - return - } - - // Send to each participant channel (non-blocking) - for i, ch := range *channels { - // Get packet struct from pool - pp := participantPacketPool.Get().(*participantPacket) - pp.kind = kind - pp.packet = pkt - - select { - case ch <- pp: - // Sent successfully - default: - // Channel full, drop packet, log? - slog.Warn("Channel full, dropping packet", "channel_index", i) - participantPacketPool.Put(pp) - } - } -} diff --git a/packages/relay/main.go b/packages/relay/main.go deleted file mode 100644 index f7d43be8..00000000 --- a/packages/relay/main.go +++ /dev/null @@ -1,50 +0,0 @@ -package main - -import ( - "context" - "log/slog" - "os" - "os/signal" - "relay/internal/common" - "relay/internal/core" - "syscall" -) - -func main() { - // Setup main context and stopper - mainCtx, mainStopper := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) - - // Get flags and log them - common.InitFlags() - common.GetFlags().DebugLog() - - logLevel := slog.LevelInfo - if common.GetFlags().Verbose { - logLevel = slog.LevelDebug - } - - // Create the base handler with debug level - baseHandler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ - Level: logLevel, - }) - customHandler := &common.CustomHandler{Handler: baseHandler} - logger := slog.New(customHandler) - slog.SetDefault(logger) - - // Start relay - relay, err := core.InitRelay(mainCtx, mainStopper) - if err != nil { - slog.Error("Failed to initialize relay", "err", err) - mainStopper() - return - } - - // Wait for exit signal - <-mainCtx.Done() - slog.Info("Shutting down gracefully by signal..") - - defaultFile := common.GetFlags().PersistDir + "/peerstore.json" - if err = relay.SaveToFile(defaultFile); err != nil { - slog.Error("Failed to save peer store", "err", err) - } -} diff --git a/packages/scripts/common.sh b/packages/scripts/common.sh deleted file mode 100644 index fdc13d11..00000000 --- a/packages/scripts/common.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -function log { - printf '[%s] %s\n' "$(date +'%Y-%m-%d %H:%M:%S')" "$*" -} - -if [[ ! -f /etc/nestri/envs.sh ]]; then - log "Error: Environment variables script not found at /etc/nestri/envs.sh" - exit 1 -fi -source /etc/nestri/envs.sh || { log "Error: Failed to source /etc/nestri/envs.sh"; exit 1; } - -if [[ ! -f /etc/nestri/container_helpers.sh ]]; then - log "Error: Container helpers script not found at /etc/nestri/container_helpers.sh" - exit 1 -fi -source /etc/nestri/container_helpers.sh || { log "Error: Failed to source /etc/nestri/container_helpers.sh"; exit 1; } - -if [[ ! -f /etc/nestri/gpu_helpers.sh ]]; then - log "Error: GPU helpers script not found at /etc/nestri/gpu_helpers.sh" - exit 1 -fi -source /etc/nestri/gpu_helpers.sh || { log "Error: Failed to source /etc/nestri/gpu_helpers.sh"; exit 1; } diff --git a/packages/scripts/container_helpers.sh b/packages/scripts/container_helpers.sh deleted file mode 100644 index 05ab2f97..00000000 --- a/packages/scripts/container_helpers.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -set -euo pipefail - -declare container_runtime="none" -declare -Ag container_info=() - -function detect_container_runtime { - if [[ -n "${SINGULARITY_CONTAINER:-}" ]] || [[ -n "${APPTAINER_CONTAINER:-}" ]] || [[ -d "/.singularity.d" ]]; then - echo "apptainer" - elif [[ "${container:-}" == "podman" ]] || [[ -f "/run/.containerenv" ]]; then - echo "podman" - elif [[ -f "/.dockerenv" ]]; then - echo "docker" - else - # General check for containerization signs - if grep -qE "docker|lxc|kubepods|containerd" "/proc/1/cgroup" 2>/dev/null; then - echo "unknown" - else - echo "none" - fi - fi -} - -function collect_container_info { - local runtime="$1" - case "$runtime" in - apptainer) - container_info["runtime"]="apptainer" - container_info["version"]="${SINGULARITY_VERSION:-${APPTAINER_VERSION:-unknown}}" - container_info["image"]="${SINGULARITY_CONTAINER:-${APPTAINER_CONTAINER:-unknown}}" - ;; - podman) - container_info["runtime"]="podman" - if [[ -f "/run/.containerenv" ]]; then - if grep -q "name=" "/run/.containerenv" 2>/dev/null; then - container_info["name"]=$(grep "^name=" "/run/.containerenv" | sed 's/^name=//' | tr -d '"' | xargs) - fi - if grep -q "image=" "/run/.containerenv" 2>/dev/null; then - container_info["image"]=$(grep "^image=" "/run/.containerenv" | sed 's/^image=//' | tr -d '"' | xargs) - fi - fi - ;; - docker) - container_info["runtime"]="docker" - container_info["detected_via"]="dockerenv" - ;; - unknown) - container_info["runtime"]="unknown" - container_info["detected_via"]="cgroup_generic" - ;; - esac -} - -function get_container_info { - container_runtime=$(detect_container_runtime) - if [[ "${container_runtime}" != "none" ]]; then - collect_container_info "$container_runtime" - fi -} - -function debug_container_info { - echo "Container Detection Results:" - echo "> Runtime: $container_runtime" - - if [[ "$container_runtime" != "none" ]]; then - for key in "${!container_info[@]}"; do - echo ">> $key: ${container_info[$key]}" - done - else - echo "> Status: Not running in a known container" - fi -} - -# # Usage examples: -# get_container_info -# debug_container_info - -# # Get runtime -# echo "Container runtime: ${container_runtime}" diff --git a/packages/scripts/entrypoint.sh b/packages/scripts/entrypoint.sh deleted file mode 100644 index 458bde9c..00000000 --- a/packages/scripts/entrypoint.sh +++ /dev/null @@ -1,370 +0,0 @@ -#!/bin/bash -set -euo pipefail - -# Common helpers as requirement -if [[ -f /etc/nestri/common.sh ]]; then - source /etc/nestri/common.sh -else - echo "Error: Common script not found at /etc/nestri/common.sh" >&2 - exit 1 -fi - -# Configuration -CACHE_DIR="${NESTRI_HOME}/.cache/nestri" -NVIDIA_INSTALLER_DIR="/tmp" -TIMEOUT_SECONDS=10 -ENTCMD_PREFIX="" - -# Ensures user ownership across directories -handle_user_permissions() { - if ! $ENTCMD_PREFIX chown "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}" 2>/dev/null; then - echo "Error: Failed to change ownership of ${NESTRI_HOME} to ${NESTRI_USER}:${NESTRI_USER}" >&2 - return 1 - fi - # Also apply to .cache - if [[ -d "${NESTRI_HOME}/.cache" ]]; then - if ! $ENTCMD_PREFIX chown "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}/.cache" 2>/dev/null; then - echo "Error: Failed to change ownership of ${NESTRI_HOME}/.cache to ${NESTRI_USER}:${NESTRI_USER}" >&2 - return 1 - fi - fi - return 0 -} - -# Waits for a given socket to be ready -wait_for_socket() { - local socket_path="$1" - local name="$2" - log "Waiting for $name socket at $socket_path..." - for ((i=1; i<=TIMEOUT_SECONDS; i++)); do - if [[ -e "$socket_path" ]]; then - log "$name socket is ready." - return 0 - fi - sleep 1 - done - log "Error: $name socket did not appear after ${TIMEOUT_SECONDS}s." - return 1 -} - -# Prepares environment for namespace-less applications (like Steam) -setup_namespaceless() { - $ENTCMD_PREFIX rm -f /run/systemd/container || true - $ENTCMD_PREFIX mkdir -p /run/pressure-vessel || true -} - -# Ensures cache directory exists -setup_cache() { - log "Setting up cache directory at $CACHE_DIR..." - mkdir -p "$CACHE_DIR" || { - log "Warning: Failed to create cache directory, continuing.." - return 1 - } - $ENTCMD_PREFIX chown "${NESTRI_USER}:${NESTRI_USER}" "$CACHE_DIR" 2>/dev/null || { - log "Warning: Failed to set cache directory ownership, continuing.." - } -} - -# Grabs NVIDIA driver installer -get_nvidia_installer() { - local driver_version="$1" - local arch="$2" - local filename="NVIDIA-Linux-${arch}-${driver_version}.run" - local cached_file="${CACHE_DIR}/${filename}" - local tmp_file="${NVIDIA_INSTALLER_DIR}/${filename}" - - # Check cache - if [[ -f "$cached_file" ]]; then - log "Found cached NVIDIA installer at $cached_file." - cp "$cached_file" "$tmp_file" || { - log "Warning: Failed to copy cached installer, proceeding with download." - rm -f "$cached_file" 2>/dev/null - } - fi - - # Download if not in tmp - if [[ ! -f "$tmp_file" ]]; then - log "Downloading NVIDIA driver installer ($filename)..." - local urls=( - "https://international.download.nvidia.com/XFree86/Linux-${arch}/${driver_version}/${filename}" - "https://international.download.nvidia.com/tesla/${driver_version}/${filename}" - ) - local success=0 - for url in "${urls[@]}"; do - if wget -q --show-progress "$url" -O "$tmp_file"; then - success=1 - break - fi - log "Failed to download from $url, trying next source..." - done - - if [[ "$success" -eq 0 ]]; then - log "Error: Failed to download NVIDIA driver from all sources." - return 1 - fi - - # Cache the downloaded file - cp "$tmp_file" "$cached_file" 2>/dev/null && \ - $ENTCMD_PREFIX chown "${NESTRI_USER}:${NESTRI_USER}" "$cached_file" 2>/dev/null || \ - log "Warning: Failed to cache NVIDIA driver, continuing..." - fi - - chmod +x "$tmp_file" || { - log "Error: Failed to make NVIDIA installer executable." - return 1 - } - return 0 -} - -# Installs the NVIDIA driver -install_nvidia_driver() { - local filename="$1" - log "Installing NVIDIA driver components from $filename..." - $ENTCMD_PREFIX bash ./"$filename" \ - --silent \ - --skip-depmod \ - --skip-module-unload \ - --no-kernel-module \ - --install-compat32-libs \ - --no-nouveau-check \ - --no-nvidia-modprobe \ - --no-systemd \ - --no-rpms \ - --no-backup \ - --no-distro-scripts \ - --no-libglx-indirect \ - --no-install-libglvnd \ - --no-check-for-alternate-installs || { - log "Error: NVIDIA driver installation failed." - return 1 - } - - log "NVIDIA driver installation completed." - return 0 -} - -log_container_info() { - if ! declare -p container_runtime &>/dev/null; then - log "Warning: container_runtime is not defined" - return - fi - - if [[ "${container_runtime:-none}" != "none" ]]; then - log "Detected container:" - log "> ${container_runtime}" - else - log "No container runtime detected" - fi -} - -log_gpu_info() { - if ! declare -p vendor_devices &>/dev/null; then - log "Warning: vendor_devices array is not defined" - return - fi - - log "Detected GPUs:" - for vendor in "${!vendor_devices[@]}"; do - log "> $vendor: ${vendor_devices[$vendor]}" - done -} - -configure_ssh() { - # Return early if SSH not enabled - if [ -z "${SSH_ENABLE_PORT+x}" ] || [ "${SSH_ENABLE_PORT:-0}" -eq 0 ]; then - return 0 - fi - - # Check if we have required key - if [ -z "${SSH_ALLOWED_KEY+x}" ] || [ -z "${SSH_ALLOWED_KEY}" ]; then - return 0 - fi - - log "Configuring SSH server on port ${SSH_ENABLE_PORT} with public key authentication" - - # Ensure SSH host keys exist - $ENTCMD_PREFIX ssh-keygen -A 2>/dev/null || { - log "Error: Failed to generate SSH host keys" - return 1 - } - - # Create .ssh directory and authorized_keys file for nestri user - mkdir -p "${NESTRI_HOME}/.ssh" - echo "${SSH_ALLOWED_KEY}" > "${NESTRI_HOME}/.ssh/authorized_keys" - chmod 700 "${NESTRI_HOME}/.ssh" - chmod 600 "${NESTRI_HOME}/.ssh/authorized_keys" - chown -R "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}/.ssh" - - # Configure secure SSH settings - { - echo "PasswordAuthentication no" - echo "PermitRootLogin no" - echo "ChallengeResponseAuthentication no" - echo "UsePAM no" - echo "PubkeyAuthentication yes" - } | while read -r line; do - if ! grep -qF "$line" /etc/ssh/sshd_config; then - printf '%s\n' "$line" | $ENTCMD_PREFIX tee -a /etc/ssh/sshd_config >/dev/null - fi - done - - # Start SSH server - log "Starting SSH server on port ${SSH_ENABLE_PORT}" - $ENTCMD_PREFIX /usr/sbin/sshd -D -p "${SSH_ENABLE_PORT}" & - SSH_PID=$! - - # Verify the process started - if ! ps -p $SSH_PID > /dev/null 2>&1; then - log "Error: SSH server failed to start" - return 1 - fi - - log "SSH server started with PID ${SSH_PID}" - return 0 -} - -main() { - # Wait for required sockets - wait_for_socket "${NESTRI_XDG_RUNTIME_DIR}/dbus-1" "DBus" || exit 1 - wait_for_socket "${NESTRI_XDG_RUNTIME_DIR}/pipewire-0" "PipeWire" || exit 1 - - # Start by getting the container we are running under - get_container_info || { - log "Warning: Failed to detect container information" - } - log_container_info - - if [[ "$container_runtime" != "apptainer" ]]; then - ENTCMD_PREFIX="sudo -E" - fi - - # Setup cache now - setup_cache - - # Configure SSH - if [ -n "${SSH_ENABLE_PORT+x}" ] && [ "${SSH_ENABLE_PORT:-0}" -ne 0 ] && \ - [ -n "${SSH_ALLOWED_KEY+x}" ] && [ -n "${SSH_ALLOWED_KEY}" ]; then - if ! configure_ssh; then - log "Error: SSH configuration failed with given variables - exiting" - exit 1 - fi - else - log "SSH not configured (missing SSH_ENABLE_PORT or SSH_ALLOWED_KEY)" - fi - - # Get and detect GPU(s) - get_gpu_info || { - log "Error: Failed to detect GPU information" - exit 1 - } - log_gpu_info - - # Handle NVIDIA GPU - if [[ -n "${vendor_devices[nvidia]:-}" ]]; then - log "NVIDIA GPU(s) detected, applying driver fix.." - - # Determine NVIDIA driver version - local nvidia_driver_version="" - if [[ -f "/proc/driver/nvidia/version" ]]; then - nvidia_driver_version=$(awk '/NVIDIA/ {for(i=1;i<=NF;i++) if ($i ~ /^[0-9]+\.[0-9\.]+/) {print $i; exit}}' /proc/driver/nvidia/version | head -n1) - elif command -v nvidia-smi >/dev/null 2>&1; then - nvidia_driver_version=$(nvidia-smi --version | grep -i 'driver version' | cut -d: -f2 | tr -d ' ') - fi - - if [[ -z "$nvidia_driver_version" ]]; then - log "Error: Failed to determine NVIDIA driver version." - # Check for other GPU vendors before exiting - if [[ -n "${vendor_devices[amd]:-}" || -n "${vendor_devices[intel]:-}" ]]; then - log "Other GPUs (AMD or Intel) detected, continuing without NVIDIA driver" - else - log "No other GPUs detected, exiting due to NVIDIA driver version failure" - exit 1 - fi - else - log "Detected NVIDIA driver version: $nvidia_driver_version" - - # Get installer - local arch=$(uname -m) - local filename="NVIDIA-Linux-${arch}-${nvidia_driver_version}.run" - cd "$NVIDIA_INSTALLER_DIR" || { - log "Error: Failed to change to $NVIDIA_INSTALLER_DIR." - exit 1 - } - get_nvidia_installer "$nvidia_driver_version" "$arch" || { - # Check for other GPU vendors before exiting - if [[ -n "${vendor_devices[amd]:-}" || -n "${vendor_devices[intel]:-}" ]]; then - log "Other GPUs (AMD or Intel) detected, continuing without NVIDIA driver" - else - log "No other GPUs detected, exiting due to NVIDIA installer failure" - exit 1 - fi - } - - # Install driver - install_nvidia_driver "$filename" || { - # Check for other GPU vendors before exiting - if [[ -n "${vendor_devices[amd]:-}" || -n "${vendor_devices[intel]:-}" ]]; then - log "Other GPUs (AMD or Intel) detected, continuing without NVIDIA driver" - else - log "No other GPUs detected, exiting due to NVIDIA driver installation failure" - exit 1 - fi - } - fi - fi - - # Make sure gamescope has CAP_SYS_NICE capabilities if available - log "Checking for CAP_SYS_NICE availability.." - if capsh --print | grep -q "Current:.*cap_sys_nice"; then - log "Giving gamescope compositor CAP_SYS_NICE permissions.." - setcap 'CAP_SYS_NICE+eip' /usr/bin/gamescope 2>/dev/null || { - log "Warning: Failed to set CAP_SYS_NICE on gamescope, continuing without it.." - } - else - log "Skipping CAP_SYS_NICE for gamescope, capability not available" - fi - - # Make sure /tmp/.X11-unix exists.. - if [[ ! -d "/tmp/.X11-unix" ]]; then - log "Creating /tmp/.X11-unix directory.." - $ENTCMD_PREFIX mkdir -p /tmp/.X11-unix || { - log "Error: Failed to create /tmp/.X11-unix directory" - exit 1 - } - # Set required perms.. - $ENTCMD_PREFIX chmod 1777 /tmp/.X11-unix || { - log "Error: Failed to chmod /tmp/.X11-unix to 1777" - exit 1 - } - fi - - # Handle user permissions - log "Ensuring user permissions..." - handle_user_permissions || exit 1 - - # Setup namespaceless env if needed for container runtime - if [[ "$container_runtime" != "podman" ]]; then - log "Applying namespace-less configuration" - setup_namespaceless - fi - - # Wait for vimputti socket before switching to application startup - wait_for_socket "/tmp/vimputti-0" "vimputti" || exit 1 - - # Switch to nestri runner entrypoint - log "Switching to application startup entrypoint..." - if [[ ! -f /etc/nestri/entrypoint_nestri.sh ]]; then - log "Error: Application entrypoint script /etc/nestri/entrypoint_nestri.sh not found" - exit 1 - fi - if [[ "$container_runtime" == "apptainer" ]]; then - exec /etc/nestri/entrypoint_nestri.sh - else - exec sudo -E -u "${NESTRI_USER}" /etc/nestri/entrypoint_nestri.sh - fi -} - -# Trap signals for clean exit -trap 'log "Received termination signal, exiting.."; exit 0' SIGINT SIGTERM - -main diff --git a/packages/scripts/entrypoint_nestri.sh b/packages/scripts/entrypoint_nestri.sh deleted file mode 100644 index a89b7e75..00000000 --- a/packages/scripts/entrypoint_nestri.sh +++ /dev/null @@ -1,280 +0,0 @@ -#!/bin/bash - -# Common helpers as requirement -if [[ -f /etc/nestri/common.sh ]]; then - source /etc/nestri/common.sh -else - echo "Error: Common script not found at /etc/nestri/common.sh" >&2 - exit 1 -fi - -# Parses resolution string -parse_resolution() { - local resolution="$1" - if [[ -z "$resolution" ]]; then - log "Error: No resolution provided" - return 1 - fi - - IFS='x' read -r width height <<< "$resolution" - if ! [[ "$width" =~ ^[0-9]+$ ]] || ! [[ "$height" =~ ^[0-9]+$ ]]; then - log "Error: Invalid resolution format. Expected: WIDTHxHEIGHT (e.g., 1920x1080), got: $resolution" - return 1 - fi - - export WIDTH="$width" - export HEIGHT="$height" - return 0 -} - -# Configuration -MAX_RETRIES=3 -RETRY_COUNT=0 -WAYLAND_READY_DELAY=3 -ENTCMD_PREFIX="" -PRELOAD_SHIM_64=/usr/lib64/libvimputti_shim.so -PRELOAD_SHIM_32=/usr/lib32/libvimputti_shim.so - -# Kills process if running -kill_if_running() { - local pid="$1" - local name="$2" - if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then - log "Killing existing $name process (PID: $pid)..." - kill "$pid" - wait "$pid" 2>/dev/null || true - fi -} - -# Starts nestri-server -start_nestri_server() { - kill_if_running "${NESTRI_PID:-}" "nestri-server" - - WAYLAND_SOCKET="${XDG_RUNTIME_DIR}/wayland-1" - - # Make sure to remove old socket if exists (along with .lock file) - if [[ -e "$WAYLAND_SOCKET" ]]; then - log "Removing stale Wayland socket $WAYLAND_SOCKET" - rm -f "$WAYLAND_SOCKET" 2>/dev/null || { - log "Error: Failed to remove stale Wayland socket $WAYLAND_SOCKET" - exit 1 - } - # Ignore error if .lock file doesn't exist - rm -f "${WAYLAND_SOCKET}.lock" 2>/dev/null || true - fi - - # Also if gstreamer cache exists, remove it to avoid previous errors from persisting - local gst_cache="${NESTRI_HOME}/.cache/gstreamer-1.0/" - if [[ -d "$gst_cache" ]]; then - log "Removing gstreamer cache at $gst_cache" - rm -rf "${gst_cache}" 2>/dev/null || { - log "Warning: Failed to remove gstreamer cache at $gst_cache" - } - fi - - # Start nestri-server - log "Starting nestri-server.." - # Try with realtime scheduling first (chrt -f 80), if fails, launch normally - if $ENTCMD_PREFIX chrt -f 80 true 2>/dev/null; then - $ENTCMD_PREFIX chrt -f 80 nestri-server $NESTRI_PARAMS & - NESTRI_PID=$! - log "Started nestri-server with realtime scheduling" - else - $ENTCMD_PREFIX nestri-server $NESTRI_PARAMS & - NESTRI_PID=$! - log "Started nestri-server" - fi - - log "Waiting for Wayland display $WAYLAND_SOCKET.." - for ((i=1; i<=15; i++)); do - if [[ -e "$WAYLAND_SOCKET" ]]; then - log "Wayland display $WAYLAND_SOCKET ready" - sleep "${WAYLAND_READY_DELAY:-3}" - start_compositor - return - fi - sleep 1 - done - - log "Error: Wayland display $WAYLAND_SOCKET not available" - increment_retry "nestri-server" - restart_chain -} - -# Starts compositor with optional application -start_compositor() { - kill_if_running "${COMPOSITOR_PID:-}" "compositor" - kill_if_running "${APP_PID:-}" "application" - - # Set default compositor if unset - if [[ -z "${NESTRI_LAUNCH_COMPOSITOR+x}" ]]; then - NESTRI_LAUNCH_COMPOSITOR="gamescope --backend wayland -g -f --rt -W ${WIDTH} -H ${HEIGHT} -r ${FRAMERATE:-60}" - fi - - # If PRELOAD_SHIM_arch's are set and exist, set LD_PRELOAD for 32/64-bit apps - local do_ld_preload=false - if [[ -f "$PRELOAD_SHIM_64" ]] || [[ -f "$PRELOAD_SHIM_32" ]]; then - do_ld_preload=true - log "Using LD_PRELOAD shim(s)" - fi - - # Configure launch cmd with dbus if set - local launch_cmd="" - if [[ -n "${NESTRI_LAUNCH_CMD+x}" ]]; then - if $do_ld_preload; then - launch_cmd="LD_PRELOAD='/usr/\$LIB/libvimputti_shim.so' dbus-launch $NESTRI_LAUNCH_CMD" - else - launch_cmd="dbus-launch $NESTRI_LAUNCH_CMD" - fi - fi - - # Launch compositor if configured - if [[ -n "${NESTRI_LAUNCH_COMPOSITOR}" ]]; then - local compositor_cmd="$NESTRI_LAUNCH_COMPOSITOR" - local is_gamescope=false - - # Check if this is a gamescope command - if [[ "$compositor_cmd" == *"gamescope"* ]]; then - is_gamescope=true - if [[ -n "$launch_cmd" ]] && [[ "$compositor_cmd" != *" -- "* ]]; then - # If steam in launch command, enable gamescope integration via -e and enable mangohud - if [[ "$launch_cmd" == *"steam"* ]]; then - compositor_cmd+=" --mangoapp -e" - fi - compositor_cmd+=" -- bash -c $(printf %q "$launch_cmd")" - fi - fi - - # Get appropriate socket based on compositor type - if $is_gamescope; then - COMPOSITOR_SOCKET="${XDG_RUNTIME_DIR}/gamescope-0" - else - COMPOSITOR_SOCKET="${XDG_RUNTIME_DIR}/wayland-0" - fi - - # Clean up old socket if exists - if [[ -e "$COMPOSITOR_SOCKET" ]]; then - log "Removing stale compositor socket $COMPOSITOR_SOCKET" - rm -f "$COMPOSITOR_SOCKET" 2>/dev/null || { - log "Error: Failed to remove stale compositor socket $COMPOSITOR_SOCKET" - exit 1 - } - # Ignore error if .lock file doesn't exist - rm -f "${COMPOSITOR_SOCKET}.lock" 2>/dev/null || true - fi - - log "Starting compositor: $compositor_cmd" - WAYLAND_DISPLAY=wayland-1 /bin/bash -c "$compositor_cmd" & - COMPOSITOR_PID=$! - - # If ld_preload is true, export LD_PRELOAD - if $do_ld_preload; then - export LD_PRELOAD='/usr/$LIB/libvimputti_shim.so' - fi - - log "Waiting for compositor socket $COMPOSITOR_SOCKET.." - for ((i=1; i<=15; i++)); do - if [[ -e "$COMPOSITOR_SOCKET" ]]; then - log "Compositor socket ready $COMPOSITOR_SOCKET" - # Patch resolution with wlr-randr for non-gamescope compositors - if ! $is_gamescope; then - local OUTPUT_NAME - OUTPUT_NAME=$(WAYLAND_DISPLAY=wayland-0 wlr-randr --json | jq -r '.[] | select(.enabled == true) | .name' | head -n 1) - if [ -z "$OUTPUT_NAME" ]; then - log "Warning: No enabled outputs detected. Skipping wlr-randr resolution patch" - return - fi - WAYLAND_DISPLAY=wayland-0 wlr-randr --output "$OUTPUT_NAME" --custom-mode "$WIDTH"x"$HEIGHT" - log "Patched resolution with wlr-randr" - - if [[ -n "$launch_cmd" ]]; then - log "Starting application: $launch_cmd" - WAYLAND_DISPLAY="$COMPOSITOR_SOCKET" bash -c "$launch_cmd" & - APP_PID=$! - fi - else - log "Gamescope detected, skipping wlr-randr resolution patch" - fi - return - fi - sleep 1 - done - log "Warning: Compositor socket not found after 15 seconds ($COMPOSITOR_SOCKET)" - else - # Launch standalone application if no compositor - if [[ -n "$launch_cmd" ]]; then - log "Starting standalone application: $launch_cmd" - WAYLAND_DISPLAY=wayland-1 bash -c "$launch_cmd" & - APP_PID=$! - else - log "No compositor or application configured" - fi - fi -} - -# Increments retry counter -increment_retry() { - local component="$1" - ((RETRY_COUNT++)) - if [[ "$RETRY_COUNT" -ge "$MAX_RETRIES" ]]; then - log "Error: Max retries reached for $component" - exit 1 - fi -} - -# Restarts the chain -restart_chain() { - log "Restarting nestri-server and compositor..." - start_nestri_server -} - -# Cleans up processes -cleanup() { - local exit_code=$? - log "Terminating processes..." - kill_if_running "${NESTRI_PID:-}" "nestri-server" - kill_if_running "${COMPOSITOR_PID:-}" "compositor" - kill_if_running "${APP_PID:-}" "application" - exit $exit_code -} - -# Monitor processes for unexpected exits -main_loop() { - trap cleanup SIGINT SIGTERM EXIT - - while true; do - sleep 1 - # Check nestri-server - if [[ -n "${NESTRI_PID:-}" ]] && ! kill -0 "${NESTRI_PID}" 2>/dev/null; then - log "nestri-server died" - increment_retry "nestri-server" - restart_chain - # Check compositor - elif [[ -n "${COMPOSITOR_PID:-}" ]] && ! kill -0 "${COMPOSITOR_PID}" 2>/dev/null; then - log "compositor died" - increment_retry "compositor" - start_compositor - # Check application - elif [[ -n "${APP_PID:-}" ]] && ! kill -0 "${APP_PID}" 2>/dev/null; then - log "application died" - increment_retry "application" - start_compositor - fi - done -} - -main() { - parse_resolution "${RESOLUTION:-1920x1080}" || exit 1 - get_container_info || { - log "Warning: Failed to detect container information." - } - - if [[ "$container_runtime" != "apptainer" ]]; then - ENTCMD_PREFIX="sudo -E -u ${NESTRI_USER}" - fi - - restart_chain - main_loop -} - -main diff --git a/packages/scripts/envs.sh b/packages/scripts/envs.sh deleted file mode 100644 index 7c89902f..00000000 --- a/packages/scripts/envs.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -export USER=${NESTRI_USER} -export LANG=${NESTRI_LANG} -export HOME=${NESTRI_HOME} -export XDG_RUNTIME_DIR=${NESTRI_XDG_RUNTIME_DIR} - -# Causes some setups to break -export PROTON_NO_FSYNC=1 - -# Make gstreamer GL elements work without display output (NVIDIA issue..) -export GST_GL_API=gles2 -export GST_GL_WINDOW=surfaceless - -# Gamescope does not respect MangoHud default config location -export MANGOHUD_CONFIGFILE=/etc/nestri/configs/MangoHud/MangoHud.conf diff --git a/packages/scripts/gpu_helpers.sh b/packages/scripts/gpu_helpers.sh deleted file mode 100644 index 4b367f9d..00000000 --- a/packages/scripts/gpu_helpers.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -set -euo pipefail - -declare -A vendor_devices=() - -function get_gpu_info { - vendor_devices=() - - local gpu_info=$(lspci -nn | grep -E '\<(0300|0302|0380)\>') - - while IFS= read -r line; do - # Extract vendor_id from [vendor_id:device_id] - local vendor_id=$(echo "$line" | sed -nE 's/.*\[([[:xdigit:]]{4}):[[:xdigit:]]{4}\].*/\1/p' | tr '[:upper:]' '[:lower:]') - local id=$(echo "$line" | awk '{print $1}') - - # Map vendor_id to known vendors - local vendor="unknown" - case "$vendor_id" in - 10de) vendor="nvidia" ;; - 8086) vendor="intel" ;; - 1002 | 1022) vendor="amd" ;; - # Add other vendor IDs as needed - esac - - if [[ "$vendor" != "unknown" ]]; then - vendor_devices["$vendor"]+="$id " - fi - done <<<"$gpu_info" -} - -function debug_gpu_info { - echo "Detected GPUs:" - for vendor in "${!vendor_devices[@]}"; do - echo " $vendor: ${vendor_devices[$vendor]}" - done -} - -# # Usage example: -# get_gpu_info -# debug_gpu_info - -# # Access NVIDIA GPUs specifically -# if [[ -n "${vendor_devices[nvidia]:-}" ]]; then -# echo "NVIDIA GPUs detected: ${vendor_devices[nvidia]}" -# else -# echo "No NVIDIA GPUs found" -# fi \ No newline at end of file diff --git a/packages/scripts/src/db-reset.sh b/packages/scripts/src/db-reset.sh deleted file mode 100644 index 77f69649..00000000 --- a/packages/scripts/src/db-reset.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -database=$(echo $SST_RESOURCE_Postgres | jq -r '.database') -clusterArn=$(echo $SST_RESOURCE_Postgres | jq -r '.clusterArn') -secretArn=$(echo $SST_RESOURCE_Postgres | jq -r '.secretArn') - -sql=$(cat <<-'STMT' -DO $$ -DECLARE - row record; -BEGIN - FOR row IN SELECT * FROM pg_tables WHERE schemaname = 'public' OR schemaname = 'drizzle' - LOOP - EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(row.tablename) || ' CASCADE'; - EXECUTE 'DROP TABLE IF EXISTS drizzle.' || quote_ident(row.tablename) || ' CASCADE'; - END LOOP; -END; -$$; -STMT -) - -response=$(aws rds-data execute-statement --resource-arn $clusterArn --secret-arn $secretArn --database $database --sql "$sql" --format-records-as JSON) -json=$(echo $response | jq -r '.formattedRecords') -echo "$json" | jq . diff --git a/packages/scripts/src/psql.sh b/packages/scripts/src/psql.sh deleted file mode 100644 index 0e0ce3c0..00000000 --- a/packages/scripts/src/psql.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -database=$(echo $SST_RESOURCE_Postgres | jq -r '.database') -clusterArn=$(echo $SST_RESOURCE_Postgres | jq -r '.clusterArn') -secretArn=$(echo $SST_RESOURCE_Postgres | jq -r '.secretArn') - -sql="$@" -response=$(aws rds-data execute-statement --resource-arn $clusterArn --secret-arn $secretArn --database $database --sql "$sql" --format-records-as JSON) -json=$(echo $response | jq -r '.formattedRecords') -echo "$json" | jq . \ No newline at end of file diff --git a/packages/scripts/supervisord.conf b/packages/scripts/supervisord.conf deleted file mode 100644 index 7f32b63f..00000000 --- a/packages/scripts/supervisord.conf +++ /dev/null @@ -1,61 +0,0 @@ -[supervisord] -nodaemon=true -loglevel=info -logfile=/tmp/supervisord.log - -[program:dbus] -command=dbus-daemon --system --nofork --nopidfile -autorestart=true -autostart=true -startretries=3 -priority=1 -environment=XDG_RUNTIME_DIR=%(ENV_NESTRI_XDG_RUNTIME_DIR)s - -[program:pipewire] -user=nestri -command=dbus-launch pipewire -autorestart=true -autostart=true -startretries=3 -priority=3 -nice=-2 -environment=HOME=%(ENV_NESTRI_HOME)s,XDG_RUNTIME_DIR=%(ENV_NESTRI_XDG_RUNTIME_DIR)s - -[program:pipewire-pulse] -user=nestri -command=dbus-launch pipewire-pulse -autorestart=true -autostart=true -startretries=3 -priority=4 -nice=-2 -environment=HOME=%(ENV_NESTRI_HOME)s,XDG_RUNTIME_DIR=%(ENV_NESTRI_XDG_RUNTIME_DIR)s - -[program:wireplumber] -user=nestri -command=dbus-launch wireplumber -autorestart=true -autostart=true -startretries=3 -priority=5 -nice=-2 -environment=HOME=%(ENV_NESTRI_HOME)s,XDG_RUNTIME_DIR=%(ENV_NESTRI_XDG_RUNTIME_DIR)s - -[program:vimputti-manager] -user=nestri -command=vimputti-manager -autorestart=true -autostart=true -startretries=3 -priority=6 -environment=HOME=%(ENV_NESTRI_HOME)s,XDG_RUNTIME_DIR=%(ENV_NESTRI_XDG_RUNTIME_DIR)s,VIMPUTTI_PATH=%(ENV_NESTRI_VIMPUTTI_PATH)s - -[program:entrypoint] -command=/etc/nestri/entrypoint.sh -autorestart=false -autostart=true -startretries=0 -priority=10 -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -redirect_stderr=true diff --git a/packages/server/.dockerignore b/packages/server/.dockerignore deleted file mode 100644 index 9f970225..00000000 --- a/packages/server/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -target/ \ No newline at end of file diff --git a/packages/server/.gitignore b/packages/server/.gitignore deleted file mode 100644 index eec9534d..00000000 --- a/packages/server/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.mp4 -target/ \ No newline at end of file diff --git a/packages/server/Cargo.lock b/packages/server/Cargo.lock deleted file mode 100644 index 800fd097..00000000 --- a/packages/server/Cargo.lock +++ /dev/null @@ -1,5929 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "asn1-rs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" -dependencies = [ - "asn1-rs-derive 0.5.1", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - -[[package]] -name = "asn1-rs" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" -dependencies = [ - "asn1-rs-derive 0.6.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", - "synstructure", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "async-channel" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-io" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" -dependencies = [ - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "windows-sys 0.61.2", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "async-tungstenite" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f89c129ab749940f95509d84950c62092c8b4bc6e386ddb162229037a6ec91" -dependencies = [ - "atomic-waker", - "futures-core", - "futures-io", - "futures-task", - "futures-util", - "log", - "pin-project-lite", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tungstenite", -] - -[[package]] -name = "asynchronous-codec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "atomic_refcell" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" - -[[package]] -name = "attohttpc" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" -dependencies = [ - "base64", - "http", - "log", - "url", -] - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "aws-lc-rs" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", -] - -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base256emoji" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" -dependencies = [ - "const-str", - "match-lookup", -] - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" -dependencies = [ - "serde", -] - -[[package]] -name = "cbc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" -dependencies = [ - "cipher", -] - -[[package]] -name = "cc" -version = "1.2.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "ccm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae3c82e4355234767756212c570e29833699ab63e6ffd161887314cc5b43847" -dependencies = [ - "aead", - "cipher", - "ctr", - "subtle", -] - -[[package]] -name = "cfg-expr" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acd0bdbbf4b2612d09f52ba61da432140cb10930354079d0d53fafc12968726" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-link", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "clap" -version = "4.5.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "clap_lex" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" - -[[package]] -name = "cmake" -version = "0.1.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" -dependencies = [ - "cc", -] - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const-str" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "ctrlc" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" -dependencies = [ - "dispatch2", - "nix 0.30.1", - "windows-sys 0.61.2", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - -[[package]] -name = "data-encoding-macro" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" -dependencies = [ - "data-encoding", - "syn 2.0.111", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "der-parser" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" -dependencies = [ - "asn1-rs 0.6.2", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "der-parser" -version = "10.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" -dependencies = [ - "asn1-rs 0.7.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "deranged" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dispatch2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" -dependencies = [ - "bitflags 2.10.0", - "block2", - "libc", - "objc2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "dtls" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f531dd7c181beaf3cebab3716afa4d0d41ab888be85232583f56bbaf07ca208a" -dependencies = [ - "aes", - "aes-gcm", - "async-trait", - "bincode", - "byteorder", - "cbc", - "ccm", - "chacha20poly1305", - "der-parser 9.0.0", - "hmac", - "log", - "p256", - "p384", - "portable-atomic", - "rand 0.9.2", - "rand_core 0.6.4", - "rcgen", - "ring", - "rustls", - "sec1", - "serde", - "sha1", - "sha2", - "thiserror 1.0.69", - "tokio", - "webrtc-util", - "x25519-dalek", - "x509-parser 0.16.0", -] - -[[package]] -name = "dtoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "serde", - "sha2", - "subtle", - "zeroize", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "event-listener" -version = "5.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener", - "pin-project-lite", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "find-msvc-tools" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-bounded" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" -dependencies = [ - "futures-timer", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "futures-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" -dependencies = [ - "futures-io", - "rustls", - "rustls-pki-types", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi", - "wasip2", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", -] - -[[package]] -name = "gio" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5ff48bf600c68b476e61dc6b7c762f2f4eb91deef66583ba8bb815c30b5811a" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "pin-project-lite", - "smallvec", -] - -[[package]] -name = "gio-sys" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "windows-sys 0.61.2", -] - -[[package]] -name = "glib" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b" -dependencies = [ - "bitflags 2.10.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "smallvec", -] - -[[package]] -name = "glib-macros" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17" -dependencies = [ - "heck", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "glib-sys" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "gobject-sys" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "gst-plugin-version-helper" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68a894ef2d738054b950e1dbef5d9012b63fd968d4d32dbccd31bd8d8d4b219" -dependencies = [ - "chrono", - "toml_edit", -] - -[[package]] -name = "gst-plugin-webrtc" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09da386aa26c4c050357ea09f459c54f8887f6cf7bdddcb0cbe6a43aeccc9ff1" -dependencies = [ - "anyhow", - "async-recursion", - "async-tungstenite", - "bytes", - "chrono", - "ctrlc", - "fastrand", - "futures", - "gst-plugin-version-helper", - "gst-plugin-webrtc-signalling", - "gst-plugin-webrtc-signalling-protocol", - "gstreamer", - "gstreamer-app", - "gstreamer-audio", - "gstreamer-base", - "gstreamer-net", - "gstreamer-rtp", - "gstreamer-sdp", - "gstreamer-utils", - "gstreamer-video", - "gstreamer-webrtc", - "http", - "human_bytes", - "hyper-util", - "itertools", - "parse_link_header", - "rand 0.9.2", - "reqwest", - "rustls", - "rustls-pemfile", - "rustls-pki-types", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tokio-rustls", - "tokio-stream", - "tracing", - "tracing-log", - "tracing-subscriber", - "url", - "uuid", - "warp", -] - -[[package]] -name = "gst-plugin-webrtc-signalling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18fbceb1110f2a765d8deef208ae72d83bf9507da67b769674a490937308296" -dependencies = [ - "anyhow", - "async-tungstenite", - "clap", - "futures", - "gst-plugin-webrtc-signalling-protocol", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "rustls-pki-types", - "serde", - "serde_json", - "test-log", - "thiserror 2.0.17", - "tokio", - "tokio-rustls", - "tracing", - "tracing-log", - "tracing-subscriber", - "uuid", -] - -[[package]] -name = "gst-plugin-webrtc-signalling-protocol" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a0b7b440bb3a2cbe5ac1ef5f99bda9926d18e77b153faaaeb49933f50ad1abf" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "gstreamer" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bed73742c5d54cb48533be608b67d89f96e1ebbba280be7823f1ef995e3a9d7" -dependencies = [ - "cfg-if", - "futures-channel", - "futures-core", - "futures-util", - "glib", - "gstreamer-sys", - "itertools", - "kstring", - "libc", - "muldiv", - "num-integer", - "num-rational", - "option-operations", - "pastey 0.2.0", - "pin-project-lite", - "serde", - "serde_bytes", - "smallvec", - "thiserror 2.0.17", -] - -[[package]] -name = "gstreamer-app" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "895753fb0f976693f321e6b9d68f746ef9095f1a5b8277c11d85d807a949fbfc" -dependencies = [ - "futures-core", - "futures-sink", - "glib", - "gstreamer", - "gstreamer-app-sys", - "gstreamer-base", - "libc", -] - -[[package]] -name = "gstreamer-app-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7719cee28afda1a48ab1ee93769628bd0653d3c5be1923bce9a8a4550fcc980" -dependencies = [ - "glib-sys", - "gstreamer-base-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-audio" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92829dbca7c59ed4bf0c9154dd8c0cf3185d6bf9dad821b058b801d9671fa763" -dependencies = [ - "cfg-if", - "glib", - "gstreamer", - "gstreamer-audio-sys", - "gstreamer-base", - "libc", - "serde", - "smallvec", -] - -[[package]] -name = "gstreamer-audio-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6acd80847b78122c45983597f74a29071d63273c1eded14be5f7381301711475" -dependencies = [ - "glib-sys", - "gobject-sys", - "gstreamer-base-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-base" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd15c7e37d306573766834a5cbdd8ee711265f217b060f40a9a8eda45298488" -dependencies = [ - "atomic_refcell", - "cfg-if", - "glib", - "gstreamer", - "gstreamer-base-sys", - "libc", -] - -[[package]] -name = "gstreamer-base-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27a2eda2c61e13c11883bf19b290d07ea6b53d04fd8bfeb7af64b6006c6c9ee6" -dependencies = [ - "glib-sys", - "gobject-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-net" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44e0afa0ccd2f8a25126f815ce344c8dcad00c383ff6e3a30f97ba3f4310bebf" -dependencies = [ - "gio", - "glib", - "gstreamer", - "gstreamer-net-sys", -] - -[[package]] -name = "gstreamer-net-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9264c57cea9d8f163d2b166ea147d417e3a0e85b9b0c29f4849ada6a30915d0" -dependencies = [ - "gio-sys", - "glib-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-rtp" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e720d69e5e9dd904bba7eb6703d45035bfa343bc3c4b302b988a095ad896b3e" -dependencies = [ - "glib", - "gstreamer", - "gstreamer-rtp-sys", - "libc", -] - -[[package]] -name = "gstreamer-rtp-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac2a69fa0fc8a124059616c36767030b1bebffb454a3ca2bb5a77b17b3f2e1b" -dependencies = [ - "glib-sys", - "gstreamer-base-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-sdp" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6bd9534fe9e59fdc3eaae7ae5fe94c2a80d42339496ee96b5c281e83a72695a" -dependencies = [ - "glib", - "gstreamer", - "gstreamer-sdp-sys", -] - -[[package]] -name = "gstreamer-sdp-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2bf58223598ba2e9098b060959df516f7ff015a66e6fa18773d66e27a00dec" -dependencies = [ - "glib-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d88630697e757c319e7bcec7b13919ba80492532dd3238481c1c4eee05d4904" -dependencies = [ - "cfg-if", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-utils" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3117f395f1ce1a9528774edbd5828c4d9de9c24568c1446cb138c73906b70420" -dependencies = [ - "gstreamer", - "gstreamer-app", - "gstreamer-video", - "thiserror 2.0.17", -] - -[[package]] -name = "gstreamer-video" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33987f6a6a99750a07b0341d6288bac89b9b301be4672a209935203d4608d547" -dependencies = [ - "cfg-if", - "futures-channel", - "glib", - "gstreamer", - "gstreamer-base", - "gstreamer-video-sys", - "libc", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "gstreamer-video-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00c28faad96cd40a7b7592433051199691b131b08f622ed5d51c54e049792d3" -dependencies = [ - "glib-sys", - "gobject-sys", - "gstreamer-base-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-webrtc" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc104c3d81d3c43af9e13d75948a151450de72713bbf0cdee2dfd83de76a44bf" -dependencies = [ - "glib", - "gstreamer", - "gstreamer-sdp", - "gstreamer-webrtc-sys", - "libc", -] - -[[package]] -name = "gstreamer-webrtc-sys" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32ba28a2aeed771fc85c53276abc0506b6a61a803f5d6bd12292cd3e41f17a3" -dependencies = [ - "glib-sys", - "gstreamer-sdp-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "h2" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64", - "bytes", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex_fmt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", - "socket2 0.5.10", - "thiserror 2.0.17", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "moka", - "once_cell", - "parking_lot", - "rand 0.9.2", - "resolv-conf", - "smallvec", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "http" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human_bytes" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" - -[[package]] -name = "hyper" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", -] - -[[package]] -name = "hyper-util" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" -dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.1", - "system-configuration", - "tokio", - "tower-service", - "tracing", - "windows-registry", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "if-addrs" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "if-watch" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" -dependencies = [ - "async-io", - "core-foundation 0.9.4", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-proto", - "netlink-sys", - "rtnetlink", - "system-configuration", - "tokio", - "windows", -] - -[[package]] -name = "igd-next" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" -dependencies = [ - "async-trait", - "attohttpc", - "bytes", - "futures", - "http", - "http-body-util", - "hyper", - "hyper-util", - "log", - "rand 0.9.2", - "tokio", - "url", - "xmltree", -] - -[[package]] -name = "indexmap" -version = "2.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" -dependencies = [ - "equivalent", - "hashbrown 0.16.1", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array", -] - -[[package]] -name = "interceptor" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea51375727680dc15f06e8ad90fa31df75d79dd030100e8ad60eef1c27fe2c98" -dependencies = [ - "async-trait", - "bytes", - "futures", - "log", - "portable-atomic", - "rand 0.9.2", - "rtcp", - "rtp", - "thiserror 1.0.69", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2 0.5.10", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "kstring" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.178" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" - -[[package]] -name = "libp2p" -version = "0.56.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce71348bf5838e46449ae240631117b487073d5f347c06d434caddcb91dceb5a" -dependencies = [ - "bytes", - "either", - "futures", - "futures-timer", - "getrandom 0.2.16", - "libp2p-allow-block-list", - "libp2p-autonat", - "libp2p-connection-limits", - "libp2p-core", - "libp2p-dns", - "libp2p-gossipsub", - "libp2p-identify", - "libp2p-identity", - "libp2p-kad", - "libp2p-mdns", - "libp2p-metrics", - "libp2p-noise", - "libp2p-ping", - "libp2p-quic", - "libp2p-swarm", - "libp2p-tcp", - "libp2p-upnp", - "libp2p-yamux", - "multiaddr", - "pin-project", - "rw-stream-sink", - "thiserror 2.0.17", -] - -[[package]] -name = "libp2p-allow-block-list" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16ccf824ee859ca83df301e1c0205270206223fd4b1f2e512a693e1912a8f4a" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", -] - -[[package]] -name = "libp2p-autonat" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fab5e25c49a7d48dac83d95d8f3bac0a290d8a5df717012f6e34ce9886396c0b" -dependencies = [ - "async-trait", - "asynchronous-codec", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-request-response", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "rand_core 0.6.4", - "thiserror 2.0.17", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-connection-limits" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18b8b607cf3bfa2f8c57db9c7d8569a315d5cc0a282e6bfd5ebfc0a9840b2a0" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", -] - -[[package]] -name = "libp2p-core" -version = "0.43.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d28e2d2def7c344170f5c6450c0dbe3dfef655610dbfde2f6ac28a527abbe36" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "libp2p-identity", - "multiaddr", - "multihash", - "multistream-select", - "parking_lot", - "pin-project", - "quick-protobuf", - "rand 0.8.5", - "rw-stream-sink", - "thiserror 2.0.17", - "tracing", - "unsigned-varint 0.8.0", - "web-time", -] - -[[package]] -name = "libp2p-dns" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b770c1c8476736ca98c578cba4b505104ff8e842c2876b528925f9766379f9a" -dependencies = [ - "async-trait", - "futures", - "hickory-resolver", - "libp2p-core", - "libp2p-identity", - "parking_lot", - "smallvec", - "tracing", -] - -[[package]] -name = "libp2p-gossipsub" -version = "0.49.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f58e37d8d6848e5c4c9e3c35c6f61133235bff2960c9c00a663b0849301221" -dependencies = [ - "async-channel", - "asynchronous-codec", - "base64", - "byteorder", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "getrandom 0.2.16", - "hashlink", - "hex_fmt", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "regex", - "serde", - "sha2", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-identify" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab792a8b68fdef443a62155b01970c81c3aadab5e659621b063ef252a8e65e8" -dependencies = [ - "asynchronous-codec", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "smallvec", - "thiserror 2.0.17", - "tracing", -] - -[[package]] -name = "libp2p-identity" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" -dependencies = [ - "bs58", - "ed25519-dalek", - "hkdf", - "multihash", - "quick-protobuf", - "rand 0.8.5", - "serde", - "sha2", - "thiserror 2.0.17", - "tracing", - "zeroize", -] - -[[package]] -name = "libp2p-kad" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d3fd632a5872ec804d37e7413ceea20588f69d027a0fa3c46f82574f4dee60" -dependencies = [ - "asynchronous-codec", - "bytes", - "either", - "fnv", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "serde", - "sha2", - "smallvec", - "thiserror 2.0.17", - "tracing", - "uint", - "web-time", -] - -[[package]] -name = "libp2p-mdns" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66872d0f1ffcded2788683f76931be1c52e27f343edb93bc6d0bcd8887be443" -dependencies = [ - "futures", - "hickory-proto", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "smallvec", - "socket2 0.5.10", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-metrics" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805a555148522cb3414493a5153451910cb1a146c53ffbf4385708349baf62b7" -dependencies = [ - "futures", - "libp2p-core", - "libp2p-identify", - "libp2p-identity", - "libp2p-ping", - "libp2p-swarm", - "pin-project", - "prometheus-client", - "web-time", -] - -[[package]] -name = "libp2p-noise" -version = "0.46.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc73eacbe6462a0eb92a6527cac6e63f02026e5407f8831bde8293f19217bfbf" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "libp2p-identity", - "multiaddr", - "multihash", - "quick-protobuf", - "rand 0.8.5", - "snow", - "static_assertions", - "thiserror 2.0.17", - "tracing", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "libp2p-ping" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74bb7fcdfd9fead4144a3859da0b49576f171a8c8c7c0bfc7c541921d25e60d3" -dependencies = [ - "futures", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-quic" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc448b2de9f4745784e3751fe8bc6c473d01b8317edd5ababcb0dec803d843f" -dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-tls", - "quinn", - "rand 0.8.5", - "ring", - "rustls", - "socket2 0.5.10", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-request-response" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f1cca83488b90102abac7b67d5c36fc65bc02ed47620228af7ed002e6a1478" -dependencies = [ - "async-trait", - "futures", - "futures-bounded", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "smallvec", - "tracing", -] - -[[package]] -name = "libp2p-stream" -version = "0.4.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6bd8025c80205ec2810cfb28b02f362ab48a01bee32c50ab5f12761e033464" -dependencies = [ - "futures", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "tracing", -] - -[[package]] -name = "libp2p-swarm" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aa762e5215919a34e31c35d4b18bf2e18566ecab7f8a3d39535f4a3068f8b62" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm-derive", - "lru", - "multistream-select", - "rand 0.8.5", - "smallvec", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-swarm-derive" -version = "0.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" -dependencies = [ - "heck", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "libp2p-tcp" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4e030c52c46c8d01559b2b8ca9b7c4185f10576016853129ca1fe5cd1a644" -dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libc", - "libp2p-core", - "socket2 0.5.10", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-tls" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ff65a82e35375cbc31ebb99cacbbf28cb6c4fefe26bf13756ddcf708d40080" -dependencies = [ - "futures", - "futures-rustls", - "libp2p-core", - "libp2p-identity", - "rcgen", - "ring", - "rustls", - "rustls-webpki", - "thiserror 2.0.17", - "x509-parser 0.17.0", - "yasna", -] - -[[package]] -name = "libp2p-upnp" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4757e65fe69399c1a243bbb90ec1ae5a2114b907467bf09f3575e899815bb8d3" -dependencies = [ - "futures", - "futures-timer", - "igd-next", - "libp2p-core", - "libp2p-swarm", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-yamux" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f15df094914eb4af272acf9adaa9e287baa269943f32ea348ba29cfb9bfc60d8" -dependencies = [ - "either", - "futures", - "libp2p-core", - "thiserror 2.0.17", - "tracing", - "yamux 0.12.1", - "yamux 0.13.8", -] - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "match-lookup" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest", -] - -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "mio" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "moka" -version = "0.12.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" -dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "parking_lot", - "portable-atomic", - "rustc_version", - "smallvec", - "tagptr", - "uuid", -] - -[[package]] -name = "muldiv" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" - -[[package]] -name = "multiaddr" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "libp2p-identity", - "multibase", - "multihash", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint 0.8.0", - "url", -] - -[[package]] -name = "multibase" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" -dependencies = [ - "base-x", - "base256emoji", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "multihash" -version = "0.19.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" -dependencies = [ - "core2", - "serde", - "unsigned-varint 0.8.0", -] - -[[package]] -name = "multistream-select" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" -dependencies = [ - "bytes", - "futures", - "log", - "pin-project", - "smallvec", - "unsigned-varint 0.7.2", -] - -[[package]] -name = "nestri-server" -version = "0.1.0-alpha.2" -dependencies = [ - "anyhow", - "byteorder", - "chrono", - "clap", - "dashmap", - "gst-plugin-webrtc", - "gstreamer", - "gstreamer-webrtc", - "libp2p", - "libp2p-autonat", - "libp2p-dns", - "libp2p-identify", - "libp2p-noise", - "libp2p-ping", - "libp2p-quic", - "libp2p-stream", - "libp2p-tcp", - "libp2p-yamux", - "parking_lot", - "prost", - "prost-types", - "rand 0.9.2", - "regex", - "rustls", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tracing", - "tracing-subscriber", - "unsigned-varint 0.8.0", - "vimputti", - "webrtc", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" -dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-proto" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror 2.0.17", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset", - "pin-utils", -] - -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-integer", - "num-traits", - "serde", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "oid-registry" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" -dependencies = [ - "asn1-rs 0.6.2", -] - -[[package]] -name = "oid-registry" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" -dependencies = [ - "asn1-rs 0.7.1", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "option-operations" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b31ce827892359f23d3cd1cc4c75a6c241772bbd2db17a92dcf27cbefdf52689" -dependencies = [ - "pastey 0.1.1", -] - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "parse_link_header" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc23fdb8bbf668d582b0c17120bf6b7f91d85ccad3a5b39706f019a4efda005" -dependencies = [ - "http", - "lazy_static", - "regex", - "url", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pastey" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" - -[[package]] -name = "pastey" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d6c094ee800037dff99e02cab0eaf3142826586742a270ab3d7a62656bd27a" - -[[package]] -name = "pem" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" -dependencies = [ - "base64", - "serde_core", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "polling" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prometheus-client" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf41c1a7c32ed72abe5082fb19505b969095c12da9f5732a4bc9878757fd087c" -dependencies = [ - "dtoa", - "itoa", - "parking_lot", - "prometheus-client-derive-encode", -] - -[[package]] -name = "prometheus-client-derive-encode" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "prost" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "prost-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" -dependencies = [ - "prost", -] - -[[package]] -name = "quick-protobuf" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" -dependencies = [ - "byteorder", -] - -[[package]] -name = "quick-protobuf-codec" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" -dependencies = [ - "asynchronous-codec", - "bytes", - "quick-protobuf", - "thiserror 1.0.69", - "unsigned-varint 0.8.0", -] - -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "futures-io", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" -dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.17", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.1", - "tracing", - "windows-sys 0.60.2", -] - -[[package]] -name = "quote" -version = "1.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.4", -] - -[[package]] -name = "rcgen" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" -dependencies = [ - "pem", - "ring", - "rustls-pki-types", - "time", - "x509-parser 0.16.0", - "yasna", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.10.0", -] - -[[package]] -name = "regex" -version = "1.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - -[[package]] -name = "reqwest" -version = "0.12.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "mime", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-native-certs", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", -] - -[[package]] -name = "resolv-conf" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rtcp" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d30d1c4091644431c22acf9f8be6191b56805e0e977f15ca7104b4a6d6eaec" -dependencies = [ - "bytes", - "thiserror 1.0.69", - "webrtc-util", -] - -[[package]] -name = "rtnetlink" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" -dependencies = [ - "futures", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix 0.26.4", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "rtp" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f126f38ea84c02480e32e547c1459a939052f74fb92117ac3eef23fdac6b023" -dependencies = [ - "bytes", - "memchr", - "portable-atomic", - "rand 0.9.2", - "serde", - "thiserror 1.0.69", - "webrtc-util", -] - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - -[[package]] -name = "rustix" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.23.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" -dependencies = [ - "aws-lc-rs", - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "rw-stream-sink" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" -dependencies = [ - "futures", - "pin-project", - "static_assertions", -] - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sdp" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c374dceda16965d541c8800ce9cc4e1c14acfd661ddf7952feeedc3411e5c6" -dependencies = [ - "rand 0.9.2", - "substring", - "thiserror 1.0.69", - "url", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "security-framework" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.10.1", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "serde_json" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", -] - -[[package]] -name = "serde_spanned" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core 0.6.4", -] - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "ring", - "rustc_version", - "sha2", - "subtle", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "stun" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a512c5d501e3e3b5a4bb3e8e31462d56d54a66b95a28b8596e14422bf21c32b" -dependencies = [ - "base64", - "crc", - "lazy_static", - "md-5", - "rand 0.9.2", - "ring", - "subtle", - "thiserror 1.0.69", - "tokio", - "url", - "webrtc-util", -] - -[[package]] -name = "substring" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" -dependencies = [ - "autocfg", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "system-deps" -version = "7.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c8f33736f986f16d69b6cb8b03f55ddcad5c41acc4ccc39dd88e84aa805e7f" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "target-lexicon" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" - -[[package]] -name = "test-log" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d53ac171c92a39e4769491c4b4dde7022c60042254b5fc044ae409d34a24d4" -dependencies = [ - "test-log-macros", - "tracing-subscriber", -] - -[[package]] -name = "test-log-macros" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" -dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "time" -version = "0.3.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" - -[[package]] -name = "time-macros" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" -dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.1", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-util" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", -] - -[[package]] -name = "toml_datetime" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_writer" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" -dependencies = [ - "bitflags 2.10.0", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "tracing-core" -version = "0.1.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "tungstenite" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" -dependencies = [ - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.9.2", - "rustls", - "rustls-pki-types", - "sha1", - "thiserror 2.0.17", - "url", - "utf-8", -] - -[[package]] -name = "turn" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ed995882f66ab94238de77c62e5e778389698ab700afa4696f4754da8f457cb" -dependencies = [ - "async-trait", - "base64", - "futures", - "log", - "md-5", - "portable-atomic", - "rand 0.9.2", - "ring", - "stun", - "thiserror 1.0.69", - "tokio", - "tokio-util", - "webrtc-util", -] - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "uint" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "ulid" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" -dependencies = [ - "rand 0.9.2", - "web-time", -] - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - -[[package]] -name = "unicode-ident" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] - -[[package]] -name = "unsigned-varint" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" - -[[package]] -name = "unsigned-varint" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "uuid" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" -dependencies = [ - "getrandom 0.3.4", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "version-compare" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vimputti" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6440b3684270f355fb89193bfb0de957686119626b8b207f21d91024a892d05c" -dependencies = [ - "anyhow", - "libc", - "serde", - "serde_json", - "tokio", - "tracing", - "ulid", -] - -[[package]] -name = "waitgroup" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" -dependencies = [ - "atomic-waker", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "warp" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0" -dependencies = [ - "bytes", - "futures-util", - "headers", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "log", - "mime", - "mime_guess", - "percent-encoding", - "pin-project", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "tracing", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.111", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "web-sys" -version = "0.3.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "webrtc" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fd686c0920ac08f3a57eacc48e31f0e4ca1ffefba4478784606f78c14e83ad" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "dtls", - "hex", - "interceptor", - "lazy_static", - "log", - "portable-atomic", - "rand 0.9.2", - "rcgen", - "regex", - "ring", - "rtcp", - "rtp", - "sdp", - "serde", - "serde_json", - "sha2", - "smol_str", - "stun", - "thiserror 1.0.69", - "tokio", - "turn", - "unicase", - "url", - "waitgroup", - "webrtc-data", - "webrtc-ice", - "webrtc-mdns", - "webrtc-media", - "webrtc-sctp", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "webrtc-data" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062a5438d63bb0756a221693d76cc0dd6119affee1dfdfe57abe3a2a8c8b3eea" -dependencies = [ - "bytes", - "log", - "portable-atomic", - "thiserror 1.0.69", - "tokio", - "webrtc-sctp", - "webrtc-util", -] - -[[package]] -name = "webrtc-ice" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cb13fd1a373e68addc4bba0c8ca058627518e54342583d024bdcbb8ae5d97d" -dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "portable-atomic", - "rand 0.9.2", - "serde", - "serde_json", - "stun", - "thiserror 1.0.69", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", -] - -[[package]] -name = "webrtc-mdns" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17279a067e75df72ce923fdeb7f04cd808f6f5aa4910dc6bcb4fbe66b396ace" -dependencies = [ - "log", - "socket2 0.5.10", - "thiserror 1.0.69", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-media" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a84c910fec0848fd5a0d8a5651e0ddbdedaf25a7d3ae3f0b15f71ac73a1773" -dependencies = [ - "byteorder", - "bytes", - "rand 0.9.2", - "rtp", - "thiserror 1.0.69", -] - -[[package]] -name = "webrtc-sctp" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f985465467d8910c1f8ac4382cd64f83b1f6a1a75021a82b221546f6fb3b856f" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "portable-atomic", - "rand 0.9.2", - "thiserror 1.0.69", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-srtp" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d8cdc33413f1d0192670a80ce93d17cb78d57fe3a2414be30d6f6dff121123" -dependencies = [ - "aead", - "aes", - "aes-gcm", - "byteorder", - "bytes", - "ctr", - "hmac", - "log", - "rtcp", - "rtp", - "sha1", - "subtle", - "thiserror 1.0.69", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-util" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1c0c7e0c8f280f2bbfae442701465777ac07adaf46ce0c5863cd58e13fe472a" -dependencies = [ - "async-trait", - "bitflags 1.3.2", - "bytes", - "ipnet", - "lazy_static", - "log", - "nix 0.26.4", - "portable-atomic", - "rand 0.9.2", - "thiserror 1.0.69", - "tokio", - "winapi", -] - -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" -dependencies = [ - "windows-core 0.53.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" -dependencies = [ - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result 0.4.1", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result 0.4.1", - "windows-strings", -] - -[[package]] -name = "windows-result" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winnow" -version = "0.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", - "zeroize", -] - -[[package]] -name = "x509-parser" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" -dependencies = [ - "asn1-rs 0.6.2", - "data-encoding", - "der-parser 9.0.0", - "lazy_static", - "nom", - "oid-registry 0.7.1", - "ring", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - -[[package]] -name = "x509-parser" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" -dependencies = [ - "asn1-rs 0.7.1", - "data-encoding", - "der-parser 10.0.0", - "lazy_static", - "nom", - "oid-registry 0.8.1", - "rusticata-macros", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "xml-rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" - -[[package]] -name = "xmltree" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" -dependencies = [ - "xml-rs", -] - -[[package]] -name = "yamux" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot", - "pin-project", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "yamux" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot", - "pin-project", - "rand 0.9.2", - "static_assertions", - "web-time", -] - -[[package]] -name = "yasna" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" -dependencies = [ - "time", -] - -[[package]] -name = "yoke" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "zerotrie" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] diff --git a/packages/server/Cargo.toml b/packages/server/Cargo.toml deleted file mode 100644 index 418dd1c1..00000000 --- a/packages/server/Cargo.toml +++ /dev/null @@ -1,43 +0,0 @@ -[package] -name = "nestri-server" -version = "0.1.0-alpha.2" -edition = "2024" - -[[bin]] -name = "nestri-server" -path = "src/main.rs" - -[dependencies] -gstreamer = { version = "0.24", features = ["v1_26"] } -gstreamer-webrtc = { version = "0.24", features = ["v1_26"] } -gst-plugin-webrtc = { version = "0.14" } -serde = { version = "1.0", features = ["derive"] } -tokio = { version = "1.48", features = ["full"] } -tokio-stream = { version = "0.1", features = ["full"] } -clap = { version = "4.5", features = ["env", "derive"] } -serde_json = "1.0" -webrtc = "0.14" -regex = "1.11" -rand = "0.9" -rustls = { version = "0.23", features = ["ring"] } -tracing = "0.1" -tracing-subscriber = { version = "0.3", features = ["env-filter"] } -vimputti = "0.1.7" -chrono = "0.4" -prost = "0.14" -prost-types = "0.14" -parking_lot = "0.12" -byteorder = "1.5" -libp2p = { version = "0.56", features = ["identify", "dns", "tcp", "noise", "ping", "tokio", "serde", "yamux", "macros", "autonat", "quic"] } -libp2p-identify = "0.47" -libp2p-ping = "0.47" -libp2p-autonat = { version = "0.15", features = ["v2"] } -libp2p-stream = "0.4.0-alpha" -libp2p-yamux = "0.47" -libp2p-noise = "0.46" -libp2p-dns = { version = "0.44", features = ["tokio"] } -libp2p-tcp = { version = "0.44", features = ["tokio"] } -libp2p-quic = { version = "0.13", features = ["tokio"] } -dashmap = "6.1" -anyhow = "1.0" -unsigned-varint = "0.8" diff --git a/packages/server/pkg/PKGBUILD b/packages/server/pkg/PKGBUILD deleted file mode 100644 index 95256d12..00000000 --- a/packages/server/pkg/PKGBUILD +++ /dev/null @@ -1,32 +0,0 @@ -pkgname=nestri-git -pkgver=0.0.1 -pkgrel=1 -pkgdesc='[Experimental] An open-source, self-hosted Geforce Now alternative' -arch=('x86_64') -url='https://github.com/nestriness/nestri' -license=('AGPL-3.0') -provides=("${pkgname%-git}") -conflicts=("${pkgname%-git}") -depends=('rust' 'git' 'rustup' 'pkgconf' 'wayland') -source=("nestri::git+https://github.com/nestriness/nestri.git") -sha512sums=('SKIP') -pkgver() { - cd "$srcdir/${pkgname%-git}" - printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" -} - -prepare() { - cd "$srcdir/${pkgname%-git}" -} - -build() { - cd "$srcdir/${pkgname%-git}/packages/server" - - CARGO_TARGET_DIR="./build" sudo cargo build -j$(nproc) -} - -package() { - cd "$srcdir/${pkgname%-git}/packages/server" - - install -m755 -Dt "${pkgdir}/usr/bin" build/release/nestri -} diff --git a/packages/server/rust-toolchain.toml b/packages/server/rust-toolchain.toml deleted file mode 100644 index 3313c633..00000000 --- a/packages/server/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.91" \ No newline at end of file diff --git a/packages/server/src/args.rs b/packages/server/src/args.rs deleted file mode 100644 index 922778dc..00000000 --- a/packages/server/src/args.rs +++ /dev/null @@ -1,268 +0,0 @@ -use crate::args::encoding_args::AudioCaptureMethod; -use crate::enc_helper::{AudioCodec, EncoderType, VideoCodec}; -use clap::builder::TypedValueParser; -use clap::builder::{BoolishValueParser, NonEmptyStringValueParser}; -use clap::{Arg, Command, value_parser}; - -pub mod app_args; -pub mod device_args; -pub mod encoding_args; - -pub struct Args { - pub app: app_args::AppArgs, - pub device: device_args::DeviceArgs, - pub encoding: encoding_args::EncodingArgs, -} - -impl Args { - pub fn new() -> Self { - let matches = Command::new("nestri-server") - .arg( - Arg::new("verbose") - .short('v') - .long("verbose") - .env("VERBOSE") - .help("Enable verbose output") - .value_parser(BoolishValueParser::new()) - .default_value("false"), - ) - .arg( - Arg::new("relay-url") - .short('u') - .long("relay-url") - .env("RELAY_URL") - .value_parser(NonEmptyStringValueParser::new()) - .help("Nestri relay URL"), - ) - .arg( - Arg::new("resolution") - .short('r') - .long("resolution") - .env("RESOLUTION") - .help("Display/stream resolution in 'WxH' format") - .value_parser(NonEmptyStringValueParser::new()) - .default_value("1280x720"), - ) - .arg( - Arg::new("framerate") - .short('f') - .long("framerate") - .env("FRAMERATE") - .help("Display/stream framerate") - .value_parser(value_parser!(u32).range(5..240)) - .default_value("60"), - ) - .arg( - Arg::new("room") - .long("room") - .env("NESTRI_ROOM") - .help("Nestri room name/identifier"), - ) - .arg( - Arg::new("vimputti-path") - .long("vimputti-path") - .env("VIMPUTTI_PATH") - .help("Path to vimputti socket") - .value_parser(NonEmptyStringValueParser::new()) - .default_value("/tmp/vimputti-0"), - ) - .arg( - Arg::new("gpu-vendor") - .short('g') - .long("gpu-vendor") - .env("GPU_VENDOR") - .help("GPU to use by vendor") - .required(false), - ) - .arg( - Arg::new("gpu-name") - .short('n') - .long("gpu-name") - .env("GPU_NAME") - .help("GPU to use by name") - .required(false), - ) - .arg( - Arg::new("gpu-index") - .short('i') - .long("gpu-index") - .env("GPU_INDEX") - .help("GPU to use by index") - .value_parser(value_parser!(u32).range(0..)) - .required(false), - ) - .arg( - Arg::new("gpu-card-path") - .long("gpu-card-path") - .env("GPU_CARD_PATH") - .help("Force a specific GPU by /dev/dri/ card or render path") - .required(false) - .conflicts_with_all(["gpu-vendor", "gpu-name", "gpu-index"]), - ) - .arg( - Arg::new("video-codec") - .short('c') - .long("video-codec") - .env("VIDEO_CODEC") - .help("Preferred video codec") - .value_parser(value_parser!(VideoCodec)) - .default_value("h264"), - ) - .arg( - Arg::new("video-encoder") - .long("video-encoder") - .env("VIDEO_ENCODER") - .help("Override video encoder"), - ) - .arg( - Arg::new("video-rate-control") - .long("video-rate-control") - .env("VIDEO_RATE_CONTROL") - .help("Rate control method") - .value_parser(value_parser!(encoding_args::RateControlMethod)) - .default_value("cbr"), - ) - .arg( - Arg::new("video-latency-control") - .long("video-latency-control") - .env("VIDEO_LATENCY_CONTROL") - .help("Video latency control") - .value_parser(value_parser!(encoding_args::LatencyControl)) - .default_value("lowest-latency"), - ) - .arg( - Arg::new("video-cqp") - .long("video-cqp") - .env("VIDEO_CQP") - .help("Constant Quantization Parameter (CQP) quality") - .value_parser(value_parser!(u32).range(1..51)) - .default_value("26"), - ) - .arg( - Arg::new("video-bitrate") - .long("video-bitrate") - .env("VIDEO_BITRATE") - .help("Target bitrate in kbps") - .value_parser(value_parser!(u32).range(1..)) - .default_value("6000"), - ) - .arg( - Arg::new("video-bitrate-max") - .long("video-bitrate-max") - .env("VIDEO_BITRATE_MAX") - .help("Maximum bitrate in kbps") - .value_parser(value_parser!(u32).range(1..)) - .default_value("8000"), - ) - .arg( - Arg::new("video-encoder-type") - .long("video-encoder-type") - .env("VIDEO_ENCODER_TYPE") - .help("Encoder type") - .value_parser(value_parser!(EncoderType)) - .default_value("hardware"), - ) - .arg( - Arg::new("video-bit-depth") - .long("video-bit-depth") - .env("VIDEO_BIT_DEPTH") - .help("Video bit depth (8 or 10), only with DMA-BUF and non-H264 codec") - .value_parser( - clap::builder::PossibleValuesParser::new(["8", "10"]) - .map(|s| s.parse::().unwrap()), - ) - .default_value("8"), - ) - .arg( - Arg::new("keyframe-dist-secs") - .long("keyframe-dist-secs") - .env("KEYFRAME_DIST_SECS") - .help("Distance between keyframes in seconds") - .value_parser(value_parser!(u32).range(1..)) - .default_value("1"), - ) - .arg( - Arg::new("audio-capture-method") - .long("audio-capture-method") - .env("AUDIO_CAPTURE_METHOD") - .help("Audio capture method") - .value_parser(value_parser!(AudioCaptureMethod)) - .default_value("pipewire"), - ) - .arg( - Arg::new("audio-codec") - .long("audio-codec") - .env("AUDIO_CODEC") - .help("Preferred audio codec") - .value_parser(value_parser!(AudioCodec)) - .default_value("opus"), - ) - .arg( - Arg::new("audio-encoder") - .long("audio-encoder") - .env("AUDIO_ENCODER") - .help("Override audio encoder (e.g. 'opusenc')"), - ) - .arg( - Arg::new("audio-rate-control") - .long("audio-rate-control") - .env("AUDIO_RATE_CONTROL") - .help("Rate control method") - .value_parser(value_parser!(encoding_args::RateControlMethod)) - .default_value("cbr"), - ) - .arg( - Arg::new("audio-latency-control") - .long("audio-latency-control") - .env("AUDIO_LATENCY_CONTROL") - .help("Audio latency control") - .value_parser(value_parser!(encoding_args::LatencyControl)) - .default_value("lowest-latency"), - ) - .arg( - Arg::new("audio-bitrate") - .long("audio-bitrate") - .env("AUDIO_BITRATE") - .help("Target bitrate in kbps") - .value_parser(value_parser!(u32).range(1..)) - .default_value("128"), - ) - .arg( - Arg::new("audio-bitrate-max") - .long("audio-bitrate-max") - .env("AUDIO_BITRATE_MAX") - .help("Maximum bitrate in kbps") - .value_parser(value_parser!(u32).range(1..)) - .default_value("192"), - ) - .arg( - Arg::new("software-render") - .long("software-render") - .env("SOFTWARE_RENDER") - .help("Use software rendering for wayland") - .value_parser(BoolishValueParser::new()) - .default_value("false"), - ) - .arg( - Arg::new("zero-copy") - .long("zero-copy") - .env("ZERO_COPY") - .help("Use zero-copy pipeline") - .value_parser(BoolishValueParser::new()) - .default_value("false"), - ) - .get_matches(); - - Self { - app: app_args::AppArgs::from_matches(&matches), - device: device_args::DeviceArgs::from_matches(&matches), - encoding: encoding_args::EncodingArgs::from_matches(&matches), - } - } - - pub fn debug_print(&self) { - self.app.debug_print(); - self.device.debug_print(); - self.encoding.debug_print(); - } -} diff --git a/packages/server/src/args/app_args.rs b/packages/server/src/args/app_args.rs deleted file mode 100644 index d313b8c9..00000000 --- a/packages/server/src/args/app_args.rs +++ /dev/null @@ -1,86 +0,0 @@ -pub struct AppArgs { - /// Verbose output mode - pub verbose: bool, - - /// Virtual display resolution - pub resolution: (u32, u32), - /// Virtual display framerate - pub framerate: u32, - - /// Nestri relay url - pub relay_url: String, - /// Nestri room name/identifier - pub room: String, - - /// vimputti socket path - pub vimputti_path: Option, - - /// Use software rendering for wayland display - pub software_render: bool, - - /// Experimental zero-copy pipeline support - /// TODO: Move to video encoding flags - pub zero_copy: bool, -} -impl AppArgs { - pub fn from_matches(matches: &clap::ArgMatches) -> Self { - Self { - verbose: matches.get_one::("verbose").unwrap_or(&false).clone(), - resolution: { - let res = matches - .get_one::("resolution") - .unwrap_or(&"1280x720".to_string()) - .clone(); - let parts: Vec<&str> = res.split('x').collect(); - if parts.len() >= 2 { - ( - parts[0].parse::().unwrap_or(1280), - parts[1].parse::().unwrap_or(720), - ) - } else { - (1280, 720) - } - }, - framerate: matches.get_one::("framerate").unwrap_or(&60).clone(), - relay_url: matches - .get_one::("relay-url") - .expect("relay url cannot be empty") - .clone(), - // Generate random room name if not provided - room: matches - .get_one::("room") - .unwrap_or(&rand::random::().to_string()) - .clone(), - vimputti_path: matches - .get_one::("vimputti-path") - .map(|s| s.clone()), - software_render: matches - .get_one::("software-render") - .unwrap_or(&false) - .clone(), - zero_copy: matches - .get_one::("zero-copy") - .unwrap_or(&false) - .clone(), - } - } - - pub fn debug_print(&self) { - tracing::info!("AppArgs:"); - tracing::info!("> verbose: {}", self.verbose); - tracing::info!( - "> resolution: '{}x{}'", - self.resolution.0, - self.resolution.1 - ); - tracing::info!("> framerate: {}", self.framerate); - tracing::info!("> relay_url: '{}'", self.relay_url); - tracing::info!("> room: '{}'", self.room); - tracing::info!( - "> vimputti_path: '{}'", - self.vimputti_path.as_ref().map_or("None", |s| s.as_str()) - ); - tracing::info!("> software_render: {}", self.software_render); - tracing::info!("> zero_copy: {}", self.zero_copy); - } -} diff --git a/packages/server/src/args/device_args.rs b/packages/server/src/args/device_args.rs deleted file mode 100644 index 80003d53..00000000 --- a/packages/server/src/args/device_args.rs +++ /dev/null @@ -1,40 +0,0 @@ -pub struct DeviceArgs { - /// GPU vendor (e.g. "intel") - pub gpu_vendor: Option, - /// GPU name (e.g. "a770") - pub gpu_name: Option, - /// GPU index, if multiple same GPUs are present, None for auto-selection - pub gpu_index: Option, - /// GPU card/render path, sets card explicitly from such path - pub gpu_card_path: Option, -} -impl DeviceArgs { - pub fn from_matches(matches: &clap::ArgMatches) -> Self { - Self { - gpu_vendor: matches.get_one::("gpu-vendor").cloned(), - gpu_name: matches.get_one::("gpu-name").cloned(), - gpu_index: matches.get_one::("gpu-index").cloned(), - gpu_card_path: matches.get_one::("gpu-card-path").cloned(), - } - } - - pub fn debug_print(&self) { - tracing::info!("DeviceArgs:"); - tracing::info!( - "> gpu_vendor: '{}'", - self.gpu_vendor.as_deref().unwrap_or("auto") - ); - tracing::info!( - "> gpu_name: '{}'", - self.gpu_name.as_deref().unwrap_or("auto") - ); - tracing::info!( - "> gpu_index: {}", - self.gpu_index.map_or("auto".to_string(), |i| i.to_string()) - ); - tracing::info!( - "> gpu_card_path: '{}'", - self.gpu_card_path.as_deref().unwrap_or("auto") - ); - } -} diff --git a/packages/server/src/args/encoding_args.rs b/packages/server/src/args/encoding_args.rs deleted file mode 100644 index b3826cba..00000000 --- a/packages/server/src/args/encoding_args.rs +++ /dev/null @@ -1,282 +0,0 @@ -use crate::enc_helper::Codec::{Audio, Video}; -use crate::enc_helper::{AudioCodec, Codec, EncoderType, VideoCodec}; -use clap::ValueEnum; -use std::ops::Deref; -use std::str::FromStr; - -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct RateControlCQP { - /// Constant Quantization Parameter (CQP) quality level - pub quality: u32, -} -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct RateControlVBR { - /// Target bitrate in kbps - pub target_bitrate: u32, - /// Maximum bitrate in kbps - pub max_bitrate: u32, -} -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct RateControlCBR { - /// Target bitrate in kbps - pub target_bitrate: u32, -} - -#[derive(Debug, PartialEq, Eq, Clone, ValueEnum)] -pub enum RateControlMethod { - CQP, - VBR, - CBR, -} -impl RateControlMethod { - pub fn as_str(&self) -> &str { - match self { - RateControlMethod::CQP => "cqp", - RateControlMethod::VBR => "vbr", - RateControlMethod::CBR => "cbr", - } - } -} -impl FromStr for RateControlMethod { - type Err = String; - - fn from_str(s: &str) -> Result { - match s { - "cqp" => Ok(RateControlMethod::CQP), - "vbr" => Ok(RateControlMethod::VBR), - "cbr" => Ok(RateControlMethod::CBR), - _ => Err(format!("Invalid rate control method: {}", s)), - } - } -} - -#[derive(Debug, PartialEq, Eq, Clone)] -pub enum RateControl { - /// Constant Quantization Parameter - CQP(RateControlCQP), - /// Variable Bitrate - VBR(RateControlVBR), - /// Constant Bitrate - CBR(RateControlCBR), -} - -#[derive(Debug, PartialEq, Eq, Clone, ValueEnum)] -pub enum LatencyControl { - LowestLatency, - HighestQuality, -} - -pub struct EncodingOptionsBase { - /// Codec (e.g. "h264", "opus" etc.) - pub codec: Codec, - /// Overridable encoder (e.g. "vah264lpenc", "opusenc" etc.) - pub encoder: Option, - /// Rate control method (e.g. "cqp", "vbr", "cbr") - pub rate_control: RateControl, - /// Latency control option, what to tweak settings towards (latency or quality) - pub latency_control: LatencyControl, -} -impl EncodingOptionsBase { - pub fn debug_print(&self) { - tracing::info!("> Codec: '{}'", self.codec.as_str()); - tracing::info!("> Encoder: '{}'", self.encoder.as_deref().unwrap_or("auto")); - match &self.rate_control { - RateControl::CQP(cqp) => { - tracing::info!("> Rate Control: CQP"); - tracing::info!("-> Quality: {}", cqp.quality); - } - RateControl::VBR(vbr) => { - tracing::info!("> Rate Control: VBR"); - tracing::info!("-> Target Bitrate: {}", vbr.target_bitrate); - tracing::info!("-> Max Bitrate: {}", vbr.max_bitrate); - } - RateControl::CBR(cbr) => { - tracing::info!("> Rate Control: CBR"); - tracing::info!("-> Target Bitrate: {}", cbr.target_bitrate); - } - } - match &self.latency_control { - LatencyControl::LowestLatency => { - tracing::info!("> Latency Control: Priorizing lowest latency"); - } - LatencyControl::HighestQuality => { - tracing::info!("> Latency Control: Priorizing quality at the cost of latency"); - } - } - } -} - -pub struct VideoEncodingOptions { - pub base: EncodingOptionsBase, - pub encoder_type: EncoderType, - pub bit_depth: u32, - pub keyframe_dist_secs: u32, -} -impl VideoEncodingOptions { - pub fn from_matches(matches: &clap::ArgMatches) -> Self { - Self { - base: EncodingOptionsBase { - codec: Video( - matches - .get_one::("video-codec") - .unwrap_or(&VideoCodec::H264) - .clone(), - ), - encoder: matches.get_one::("video-encoder").cloned(), - rate_control: match matches - .get_one::("video-rate-control") - .unwrap_or(&RateControlMethod::CBR) - { - RateControlMethod::CQP => RateControl::CQP(RateControlCQP { - quality: matches - .get_one::("video-cqp") - .unwrap() - .parse::() - .unwrap(), - }), - RateControlMethod::CBR => RateControl::CBR(RateControlCBR { - target_bitrate: matches.get_one::("video-bitrate").unwrap().clone(), - }), - RateControlMethod::VBR => RateControl::VBR(RateControlVBR { - target_bitrate: matches.get_one::("video-bitrate").unwrap().clone(), - max_bitrate: matches.get_one::("video-bitrate-max").unwrap().clone(), - }), - }, - latency_control: matches - .get_one::("video-latency-control") - .unwrap_or(&LatencyControl::LowestLatency) - .clone(), - }, - encoder_type: matches - .get_one::("video-encoder-type") - .unwrap_or(&EncoderType::HARDWARE) - .clone(), - bit_depth: matches - .get_one::("video-bit-depth") - .copied() - .unwrap_or(8), - keyframe_dist_secs: matches - .get_one::("keyframe-dist-secs") - .copied() - .unwrap_or(1), - } - } - - pub fn debug_print(&self) { - tracing::info!("Video Encoding Options:"); - self.base.debug_print(); - tracing::info!("> Encoder Type: {}", self.encoder_type.as_str()); - tracing::info!("> Bit Depth: {}", self.bit_depth); - tracing::info!("> Keyframe Distance Seconds: {}", self.keyframe_dist_secs); - } -} -impl Deref for VideoEncodingOptions { - type Target = EncodingOptionsBase; - - fn deref(&self) -> &Self::Target { - &self.base - } -} - -#[derive(Debug, PartialEq, Eq, Clone, ValueEnum)] -pub enum AudioCaptureMethod { - PULSEAUDIO, - PIPEWIRE, - ALSA, -} -impl AudioCaptureMethod { - pub fn as_str(&self) -> &str { - match self { - AudioCaptureMethod::PULSEAUDIO => "PulseAudio", - AudioCaptureMethod::PIPEWIRE => "PipeWire", - AudioCaptureMethod::ALSA => "ALSA", - } - } -} -impl FromStr for AudioCaptureMethod { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_str() { - "pulseaudio" => Ok(AudioCaptureMethod::PULSEAUDIO), - "pipewire" => Ok(AudioCaptureMethod::PIPEWIRE), - "alsa" => Ok(AudioCaptureMethod::ALSA), - _ => Err(format!("Invalid audio capture method: {}", s)), - } - } -} - -pub struct AudioEncodingOptions { - pub base: EncodingOptionsBase, - pub capture_method: AudioCaptureMethod, -} -impl AudioEncodingOptions { - pub fn from_matches(matches: &clap::ArgMatches) -> Self { - Self { - base: EncodingOptionsBase { - codec: Audio( - matches - .get_one::("audio-codec") - .unwrap_or(&AudioCodec::OPUS) - .clone(), - ), - encoder: matches.get_one::("audio-encoder").cloned(), - rate_control: match matches - .get_one::("audio-rate-control") - .unwrap_or(&RateControlMethod::CBR) - { - RateControlMethod::CBR => RateControl::CBR(RateControlCBR { - target_bitrate: matches.get_one::("audio-bitrate").unwrap().clone(), - }), - RateControlMethod::VBR => RateControl::VBR(RateControlVBR { - target_bitrate: matches.get_one::("audio-bitrate").unwrap().clone(), - max_bitrate: matches.get_one::("audio-bitrate-max").unwrap().clone(), - }), - wot => panic!("Invalid rate control method for audio: {}", wot.as_str()), - }, - latency_control: matches - .get_one::("audio-latency-control") - .unwrap_or(&LatencyControl::LowestLatency) - .clone(), - }, - capture_method: matches - .get_one::("audio-capture-method") - .unwrap_or(&AudioCaptureMethod::PIPEWIRE) - .clone(), - } - } - - pub fn debug_print(&self) { - tracing::info!("Audio Encoding Options:"); - self.base.debug_print(); - tracing::info!("> Capture Method: {}", self.capture_method.as_str()); - } -} -impl Deref for AudioEncodingOptions { - type Target = EncodingOptionsBase; - - fn deref(&self) -> &Self::Target { - &self.base - } -} - -pub struct EncodingArgs { - /// Video encoder options - pub video: VideoEncodingOptions, - /// Audio encoder options - pub audio: AudioEncodingOptions, -} -impl EncodingArgs { - pub fn from_matches(matches: &clap::ArgMatches) -> Self { - Self { - video: VideoEncodingOptions::from_matches(matches), - audio: AudioEncodingOptions::from_matches(matches), - } - } - - pub fn debug_print(&self) { - tracing::info!("Encoding Arguments:"); - self.video.debug_print(); - self.audio.debug_print(); - } -} diff --git a/packages/server/src/enc_helper.rs b/packages/server/src/enc_helper.rs deleted file mode 100644 index 24014bde..00000000 --- a/packages/server/src/enc_helper.rs +++ /dev/null @@ -1,683 +0,0 @@ -use crate::args::encoding_args::RateControl; -use crate::gpu::{GPUInfo, GPUVendor, get_gpu_by_card_path, get_gpus_by_vendor}; -use clap::ValueEnum; -use gstreamer::prelude::*; -use std::error::Error; -use std::str::FromStr; - -#[derive(Debug, Eq, PartialEq, Clone, ValueEnum)] -pub enum AudioCodec { - OPUS, -} -impl AudioCodec { - pub fn as_str(&self) -> &'static str { - match self { - Self::OPUS => "Opus", - } - } -} -impl FromStr for AudioCodec { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_str() { - "opus" => Ok(Self::OPUS), - _ => Err(format!("Invalid audio codec: {}", s)), - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone, ValueEnum)] -pub enum VideoCodec { - H264, - H265, - AV1, -} -impl VideoCodec { - pub fn as_str(&self) -> &'static str { - match self { - Self::H264 => "H.264", - Self::H265 => "H.265", - Self::AV1 => "AV1", - } - } -} -impl FromStr for VideoCodec { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_str() { - "h264" | "h.264" | "avc" => Ok(Self::H264), - "h265" | "h.265" | "hevc" | "hev1" => Ok(Self::H265), - "av1" => Ok(Self::AV1), - _ => Err(format!("Invalid video codec: {}", s)), - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Codec { - Audio(AudioCodec), - Video(VideoCodec), -} -impl Codec { - pub fn as_str(&self) -> &'static str { - match self { - Self::Audio(codec) => codec.as_str(), - Self::Video(codec) => codec.as_str(), - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum EncoderAPI { - QSV, - VAAPI, - NVENC, - SOFTWARE, - UNKNOWN, -} - -impl EncoderAPI { - pub fn to_str(&self) -> &'static str { - match self { - Self::QSV => "Intel QuickSync Video", - Self::VAAPI => "Video Acceleration API", - Self::NVENC => "NVIDIA NVENC", - Self::SOFTWARE => "Software", - Self::UNKNOWN => "Unknown", - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone, ValueEnum)] -pub enum EncoderType { - SOFTWARE, - HARDWARE, -} - -impl EncoderType { - pub fn as_str(&self) -> &'static str { - match self { - Self::SOFTWARE => "Software", - Self::HARDWARE => "Hardware", - } - } -} - -#[derive(Debug, Clone, Eq, PartialEq)] -pub struct VideoEncoderInfo { - pub name: String, - pub codec: VideoCodec, - pub encoder_type: EncoderType, - pub encoder_api: EncoderAPI, - pub parameters: Vec<(String, String)>, - pub gpu_info: Option, -} - -impl VideoEncoderInfo { - pub fn new( - name: String, - codec: VideoCodec, - encoder_type: EncoderType, - encoder_api: EncoderAPI, - ) -> Self { - Self { - name, - codec, - encoder_type, - encoder_api, - parameters: Vec::new(), - gpu_info: None, - } - } - - pub fn get_parameters_string(&self) -> String { - self.parameters - .iter() - .map(|(k, v)| format!("{}={}", k, v)) - .collect::>() - .join(" ") - } - - pub fn set_parameter(&mut self, key: &str, value: &str) { - self.parameters.push((key.into(), value.into())); - } - - pub fn apply_parameters(&self, element: &gstreamer::Element, verbose: bool) { - for (key, value) in &self.parameters { - if element.has_property(key) { - if verbose { - tracing::debug!("Setting property {} to {}", key, value); - } - element.set_property_from_str(key, value); - } - } - } -} - -fn get_encoder_api(encoder: &str, encoder_type: &EncoderType) -> EncoderAPI { - match encoder_type { - EncoderType::HARDWARE => { - if encoder.starts_with("qsv") { - EncoderAPI::QSV - } else if encoder.starts_with("va") { - EncoderAPI::VAAPI - } else if encoder.starts_with("nv") { - EncoderAPI::NVENC - } else { - EncoderAPI::UNKNOWN - } - } - EncoderType::SOFTWARE => EncoderAPI::SOFTWARE, - } -} - -fn codec_from_encoder_name(name: &str) -> Option { - match name.to_lowercase() { - n if n.contains("h264") => Some(VideoCodec::H264), - n if n.contains("h265") => Some(VideoCodec::H265), - n if n.contains("av1") => Some(VideoCodec::AV1), - _ => None, - } -} - -fn modify_encoder_params(encoder: &VideoEncoderInfo, mut param_check: F) -> VideoEncoderInfo -where - F: FnMut(&str) -> Option<(String, String)>, -{ - let mut encoder_optz = encoder.clone(); - let element = match gstreamer::ElementFactory::make(&encoder_optz.name).build() { - Ok(e) => e, - Err(_) => return encoder_optz, // Return original if element creation fails - }; - - element.list_properties().iter().for_each(|prop| { - let prop_name = prop.name(); - if let Some((key, value)) = param_check(prop_name) { - encoder_optz.set_parameter(&key, &value); - } - }); - - encoder_optz -} - -// Parameter setting helpers -pub fn encoder_cqp_params(encoder: &VideoEncoderInfo, quality: u32) -> VideoEncoderInfo { - modify_encoder_params(encoder, |prop| { - let pl = prop.to_lowercase(); - if !pl.contains("qp") { - return None; - } - - if pl.contains("i") || pl.contains("min") { - Some((prop.into(), quality.to_string())) - } else if pl.contains("p") || pl.contains("max") { - Some((prop.into(), (quality + 2).to_string())) - } else { - None - } - }) -} - -pub fn encoder_vbr_params( - encoder: &VideoEncoderInfo, - bitrate: u32, - max_bitrate: u32, -) -> VideoEncoderInfo { - modify_encoder_params(encoder, |prop| { - let pl = prop.to_lowercase(); - if !pl.contains("bitrate") { - return None; - } - - if !pl.contains("max") { - Some((prop.into(), bitrate.to_string())) - } else if encoder.name != "svtav1enc" { - Some((prop.into(), max_bitrate.to_string())) - } else { - None - } - }) -} - -pub fn encoder_cbr_params(encoder: &VideoEncoderInfo, bitrate: u32) -> VideoEncoderInfo { - modify_encoder_params(encoder, |prop| { - let pl = prop.to_lowercase(); - if pl.contains("bitrate") && !pl.contains("max") { - Some((prop.into(), bitrate.to_string())) - } else { - None - } - }) -} - -pub fn encoder_gop_params(encoder: &VideoEncoderInfo, gop_size: u32) -> VideoEncoderInfo { - modify_encoder_params(encoder, |prop| { - let pl = prop.to_lowercase(); - if pl.contains("gop-size") - || pl.contains("int-max") - || pl.contains("max-dist") - || pl.contains("intra-period-length") - { - Some((prop.into(), gop_size.to_string())) - } else { - None - } - }) -} - -pub fn encoder_low_latency_params( - encoder: &VideoEncoderInfo, - _rate_control: &RateControl, - framerate: u32, - keyframe_dist_secs: u32, -) -> VideoEncoderInfo { - let mut encoder_optz = encoder_gop_params(encoder, framerate * keyframe_dist_secs); - - match encoder_optz.encoder_api { - EncoderAPI::QSV => { - encoder_optz.set_parameter("low-latency", "true"); - encoder_optz.set_parameter("target-usage", "7"); - } - EncoderAPI::VAAPI => { - encoder_optz.set_parameter("target-usage", "7"); - } - EncoderAPI::NVENC => { - encoder_optz.set_parameter("multi-pass", "disabled"); - encoder_optz.set_parameter("preset", "p1"); - encoder_optz.set_parameter("tune", "ultra-low-latency"); - encoder_optz.set_parameter("zerolatency", "true"); - } - EncoderAPI::SOFTWARE => match encoder_optz.name.as_str() { - "openh264enc" => { - encoder_optz.set_parameter("complexity", "low"); - encoder_optz.set_parameter("usage-type", "screen"); - } - "x264enc" => { - encoder_optz.set_parameter("rc-lookahead", "0"); - encoder_optz.set_parameter("speed-preset", "ultrafast"); - encoder_optz.set_parameter("tune", "zerolatency"); - } - "svtav1enc" => { - encoder_optz.set_parameter("preset", "11"); - encoder_optz.set_parameter("parameters-string", "lookahead=0"); - } - "av1enc" => { - encoder_optz.set_parameter("usage-profile", "realtime"); - encoder_optz.set_parameter("cpu-used", "10"); - encoder_optz.set_parameter("lag-in-frames", "0"); - } - _ => {} - }, - _ => {} - } - - encoder_optz -} - -pub fn encoder_high_quality_params( - encoder: &VideoEncoderInfo, - _rate_control: &RateControl, - framerate: u32, - keyframe_dist_secs: u32, -) -> VideoEncoderInfo { - let mut encoder_optz = encoder_gop_params(encoder, framerate * keyframe_dist_secs); - - match encoder_optz.encoder_api { - EncoderAPI::QSV => { - encoder_optz.set_parameter("low-latency", "false"); - encoder_optz.set_parameter("target-usage", "1"); - } - EncoderAPI::VAAPI => { - encoder_optz.set_parameter("target-usage", "1"); - } - EncoderAPI::NVENC => { - encoder_optz.set_parameter("multi-pass", "two-pass"); - encoder_optz.set_parameter("preset", "p7"); - encoder_optz.set_parameter("tune", "high-quality"); - encoder_optz.set_parameter("zerolatency", "false"); - encoder_optz.set_parameter("spatial-aq", "true"); - encoder_optz.set_parameter("rc-lookahead", "3"); - } - EncoderAPI::SOFTWARE => match encoder_optz.name.as_str() { - "openh264enc" => { - encoder_optz.set_parameter("complexity", "high"); - encoder_optz.set_parameter("usage-type", "screen"); - } - "x264enc" => { - encoder_optz.set_parameter("rc-lookahead", "3"); - encoder_optz.set_parameter("speed-preset", "medium"); - } - "svtav1enc" => { - encoder_optz.set_parameter("preset", "8"); - encoder_optz.set_parameter("parameters-string", "lookahead=3"); - } - "av1enc" => { - encoder_optz.set_parameter("usage-profile", "realtime"); - encoder_optz.set_parameter("cpu-used", "8"); - encoder_optz.set_parameter("lag-in-frames", "3"); - } - _ => {} - }, - _ => {} - } - - encoder_optz -} - -pub fn get_compatible_encoders(gpus: &Vec) -> Vec { - let mut encoders = Vec::new(); - let registry = gstreamer::Registry::get(); - - for plugin in registry.plugins() { - for feature in registry.features_by_plugin(plugin.plugin_name().as_str()) { - let encoder_name = feature.name(); - - let factory = match gstreamer::ElementFactory::find(encoder_name.as_str()) { - Some(f) => f, - None => continue, - }; - - let klass = match factory.metadata("klass") { - Some(k) => k.to_lowercase(), - None => continue, - }; - - if !klass.contains("encoder/video") { - continue; - } - - let encoder_type = if klass.contains("/hardware") { - EncoderType::HARDWARE - } else { - EncoderType::SOFTWARE - }; - - let api = get_encoder_api(encoder_name.as_str(), &encoder_type); - let codec = match codec_from_encoder_name(encoder_name.as_str()) { - Some(c) => c, - None => continue, - }; - - let element = match factory.create().build() { - Ok(e) => e, - Err(_) => continue, - }; - - let mut gpu_info = None; - - if encoder_type == EncoderType::HARDWARE { - gpu_info = std::panic::catch_unwind(|| { - match api { - EncoderAPI::QSV | EncoderAPI::VAAPI => { - // Safe property access with panic protection, gstreamer-rs is fun - let path = if element.has_property("device-path") { - Some(element.property::("device-path")) - } else if element.has_property("device") { - Some(element.property::("device")) - } else { - None - }; - - path.and_then(|p| get_gpu_by_card_path(&gpus, &p)) - } - EncoderAPI::NVENC => { - if encoder_name.contains("device") { - // Parse by element name's index (i.e. "nvh264device{N}enc") - let re = regex::Regex::new(r"device(\d+)").unwrap(); - if let Some(caps) = re.captures(encoder_name.as_str()) { - if let Some(m) = caps.get(1) { - if let Ok(id) = m.as_str().parse::() { - return get_gpus_by_vendor(&gpus, GPUVendor::NVIDIA) - .get(id) - .cloned(); - } - } - } - None - } else if element.has_property("cuda-device-id") { - let device_id = match element - .property_value("cuda-device-id") - .get::() - { - Ok(v) if v >= 0 => Some(v as usize), - _ => { - // If only one NVIDIA GPU, default to 0 - // fixes "Type: 'Hardware', Device: 'CPU'" issue - if get_gpus_by_vendor(&gpus, GPUVendor::NVIDIA).len() == 1 { - Some(0) - } else { - None - } - } - }; - - // We'll just treat cuda-device-id as an index - device_id.and_then(|id| { - get_gpus_by_vendor(&gpus, GPUVendor::NVIDIA) - .get(id) - .cloned() - }) - } else { - None - } - } - _ => None, - } - }) - .unwrap_or_else(|_| { - tracing::error!( - "Error occurred while querying properties for {}", - encoder_name - ); - None - }); - } - - let mut encoder_info = - VideoEncoderInfo::new(encoder_name.into(), codec, encoder_type.clone(), api); - encoder_info.gpu_info = gpu_info; - encoders.push(encoder_info); - } - } - - encoders -} - -/// Helper to return encoder from vector by name (case-insensitive). -/// # Arguments -/// * `encoders` - A vector containing information about each encoder. -/// * `name` - A string slice that holds the encoder name. -/// # Returns -/// * `Result>` - A Result containing EncoderInfo if found, or an error. -pub fn get_encoder_by_name( - encoders: &Vec, - name: &str, -) -> Result> { - let name = name.to_lowercase(); - if let Some(encoder) = encoders - .iter() - .find(|encoder| encoder.name.to_lowercase() == name) - { - Ok(encoder.clone()) - } else { - Err(format!("Encoder '{}' not found", name).into()) - } -} - -/// Helper to get encoders from vector by video codec. -/// # Arguments -/// * `encoders` - A vector containing information about each encoder. -/// * `codec` - The codec of the encoder. -/// # Returns -/// * `Vec` - A vector containing EncoderInfo structs if found. -pub fn get_encoders_by_videocodec( - encoders: &Vec, - codec: &VideoCodec, -) -> Vec { - encoders - .iter() - .filter(|encoder| encoder.codec == *codec) - .cloned() - .collect() -} - -/// Helper to get encoders from vector by encoder type. -/// # Arguments -/// * `encoders` - A vector containing information about each encoder. -/// * `encoder_type` - The type of the encoder. -/// # Returns -/// * `Vec` - A vector containing EncoderInfo structs if found. -pub fn get_encoders_by_type( - encoders: &Vec, - encoder_type: &EncoderType, -) -> Vec { - encoders - .iter() - .filter(|encoder| encoder.encoder_type == *encoder_type) - .cloned() - .collect() -} - -/// Returns best-case compatible encoder given desired codec and encoder type. -/// # Arguments -/// * `encoders` - List of encoders to pick from. -/// * `codec` - Desired codec. -/// * `encoder_type` - Desired encoder type. -/// # Returns -/// * `Result>` - A Result containing the best compatible encoder if found, or an error. -pub fn get_best_compatible_encoder( - encoders: &Vec, - codec: &Codec, - encoder_type: &EncoderType, -) -> Result> { - let mut best_encoder: Option = None; - let mut best_score: i32 = 0; - - let codec = match codec { - Codec::Video(c) => c.clone(), - Codec::Audio(_) => { - // Only for video currently - return Err("Attempted to get best compatible video encoder with audio codec".into()); - } - }; - - // Filter by codec and type first - let encoders = get_encoders_by_videocodec(encoders, &codec); - let encoders = get_encoders_by_type(&encoders, &encoder_type); - - for encoder in encoders { - // Local score - let mut score = 0; - - // API score - score += match encoder.encoder_api { - EncoderAPI::NVENC => 3, - EncoderAPI::QSV => 3, - EncoderAPI::VAAPI => 2, - EncoderAPI::SOFTWARE => 1, - EncoderAPI::UNKNOWN => 0, - }; - - // If software, score also based on name to get most compatible software encoder for low latency - if encoder.encoder_type == EncoderType::SOFTWARE { - score += match encoder.name.as_str() { - "openh264enc" => 2, - "x264enc" => 1, - "svtav1enc" => 2, - "av1enc" => 1, - _ => 0, - }; - } - - // Update best encoder based on score - if score > best_score { - best_encoder = Some(encoder.clone()); - best_score = score; - } - } - - if let Some(encoder) = best_encoder { - Ok(encoder) - } else { - Err("No compatible encoder found".into()) - } -} - -/// Returns the best compatible encoder that also passes test_encoder -pub fn get_best_working_encoder( - encoders: &Vec, - codec: &Codec, - encoder_type: &EncoderType, -) -> Result> { - let mut candidates = get_encoders_by_videocodec( - encoders, - match codec { - Codec::Video(c) => c, - Codec::Audio(_) => { - return Err("Audio codec not supported for video encoder selection".into()); - } - }, - ); - candidates = get_encoders_by_type(&candidates, encoder_type); - let mut tried = Vec::new(); - while !candidates.is_empty() { - let best = get_best_compatible_encoder(&candidates, codec, encoder_type)?; - tracing::info!("Testing encoder: {}", best.name,); - if test_encoder(&best).is_ok() { - return Ok(best); - } else { - // Remove this encoder and try next best - candidates.retain(|e| e != &best); - tried.push(best.name.clone()); - } - } - Err(format!("No working encoder found (tried: {:?})", tried).into()) -} - -/// Test if a pipeline with the given encoder can be created and set to Playing -pub fn test_encoder(encoder: &VideoEncoderInfo) -> Result<(), Box> { - let src = gstreamer::ElementFactory::make("videotestsrc").build()?; - let caps_filter = gstreamer::ElementFactory::make("capsfilter").build()?; - let caps = gstreamer::Caps::from_str("video/x-raw,width=1280,height=720,framerate=30/1")?; - caps_filter.set_property("caps", &caps); - - let enc = gstreamer::ElementFactory::make(&encoder.name).build()?; - let sink = gstreamer::ElementFactory::make("fakesink").build()?; - // Apply encoder parameters - encoder.apply_parameters(&enc, false); - - // Create pipeline and link elements - let pipeline = gstreamer::Pipeline::new(); - - let videoconvert = gstreamer::ElementFactory::make("videoconvert").build()?; - pipeline.add_many(&[&src, &caps_filter, &videoconvert, &enc, &sink])?; - gstreamer::Element::link_many(&[&src, &caps_filter, &videoconvert, &enc, &sink])?; - - let bus = pipeline.bus().ok_or("Pipeline has no bus")?; - pipeline.set_state(gstreamer::State::Playing)?; - - // Wait for either error or async-done (state change complete) - for msg in bus.iter_timed(gstreamer::ClockTime::from_seconds(10)) { - match msg.view() { - gstreamer::MessageView::Error(err) => { - let err_msg = format!("Pipeline error: {}", err.error()); - tracing::error!("Pipeline error, encoder test failed: {}", err_msg); - let _ = pipeline.set_state(gstreamer::State::Null); - return Err(err_msg.into()); - } - gstreamer::MessageView::AsyncDone(_) => { - // Pipeline successfully reached PLAYING state - tracing::debug!("Pipeline reached PLAYING state successfully"); - let _ = pipeline.set_state(gstreamer::State::Null); - return Ok(()); - } - _ => {} - } - } - - // If we got here, timeout occurred without reaching PLAYING or error - let _ = pipeline.set_state(gstreamer::State::Null); - Err("Encoder test timed out".into()) -} diff --git a/packages/server/src/gpu.rs b/packages/server/src/gpu.rs deleted file mode 100644 index 1076858d..00000000 --- a/packages/server/src/gpu.rs +++ /dev/null @@ -1,288 +0,0 @@ -use std::error::Error; -use std::fs; -use std::str; - -#[derive(Debug, Eq, PartialEq, Clone, Hash)] -pub enum GPUVendor { - UNKNOWN = 0x0000, - INTEL = 0x8086, - NVIDIA = 0x10de, - AMD = 0x1002, -} -impl From for GPUVendor { - fn from(value: u16) -> Self { - match value { - 0x8086 => GPUVendor::INTEL, - 0x10de => GPUVendor::NVIDIA, - 0x1002 => GPUVendor::AMD, - _ => GPUVendor::UNKNOWN, - } - } -} -impl From<&str> for GPUVendor { - fn from(value: &str) -> Self { - match value.to_lowercase().as_str() { - "intel" => GPUVendor::INTEL, - "nvidia" => GPUVendor::NVIDIA, - "amd" => GPUVendor::AMD, - _ => GPUVendor::UNKNOWN, - } - } -} -impl From for GPUVendor { - fn from(value: String) -> Self { - GPUVendor::from(value.as_str()) - } -} -impl GPUVendor { - pub fn as_str(&self) -> &str { - match self { - GPUVendor::INTEL => "Intel", - GPUVendor::NVIDIA => "NVIDIA", - GPUVendor::AMD => "AMD", - GPUVendor::UNKNOWN => "Unknown", - } - } -} -impl std::fmt::Display for GPUVendor { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.as_str()) - } -} - -#[derive(Debug, Clone, Eq, PartialEq, Hash)] -pub struct GPUInfo { - vendor: GPUVendor, - card_path: String, - render_path: String, - device_name: String, - pci_bus_id: String, -} -impl GPUInfo { - pub fn vendor(&self) -> &GPUVendor { - &self.vendor - } - - pub fn card_path(&self) -> &str { - &self.card_path - } - - pub fn render_path(&self) -> &str { - &self.render_path - } - - pub fn device_name(&self) -> &str { - &self.device_name - } - - pub fn pci_bus_id(&self) -> &str { - &self.pci_bus_id - } - - pub fn as_str(&self) -> String { - format!( - "{} (Vendor: {}, Card Path: {}, Render Path: {}, PCI Bus ID: {})", - self.device_name, self.vendor, self.card_path, self.render_path, self.pci_bus_id - ) - } -} -impl std::fmt::Display for GPUInfo { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.as_str()) - } -} - -/// Retrieves a list of GPUs available on the system. -/// # Returns -/// * `Vec` - A vector containing information about each GPU. -pub fn get_gpus() -> Result, Box> { - // Use "/sys/class/drm/card{}" to find all GPU devices - let mut gpus = Vec::new(); - let re = regex::Regex::new(r"^card(\d+)$")?; - for entry in fs::read_dir("/sys/class/drm")? { - let entry = entry?; - let file_name = entry.file_name(); - let file_name_str = file_name.to_string_lossy(); - - // We are only interested in entries that match "cardN", and getting the minor number - let caps = match re.captures(&file_name_str) { - Some(caps) => caps, - None => continue, - }; - let minor = &caps[1]; - - // Read vendor and device ID - let vendor_str = fs::read_to_string(format!("/sys/class/drm/card{}/device/vendor", minor)); - let vendor_str = match vendor_str { - Ok(v) => v, - Err(e) => { - tracing::warn!("Failed to read vendor for card{}: {}", minor, e); - continue; - } - }; - let vendor_str = vendor_str.trim_start_matches("0x").trim_end_matches('\n'); - let vendor = u16::from_str_radix(vendor_str, 16)?; - - let device_str = fs::read_to_string(format!("/sys/class/drm/card{}/device/device", minor)); - let device_str = match device_str { - Ok(d) => d, - Err(e) => { - tracing::warn!("Failed to read device for card{}: {}", minor, e); - continue; - } - }; - let device_str = device_str.trim_start_matches("0x").trim_end_matches('\n'); - - // Look up in hwdata PCI database - let device_name = match fs::read_to_string("/usr/share/hwdata/pci.ids") { - Ok(pci_ids) => parse_pci_ids(&pci_ids, vendor_str, device_str).unwrap_or("".to_owned()), - Err(e) => { - tracing::warn!("Failed to read /usr/share/hwdata/pci.ids: {}", e); - "".to_owned() - } - }; - - // Read PCI bus ID - let pci_bus_id = fs::read_to_string(format!("/sys/class/drm/card{}/device/uevent", minor)); - let pci_bus_id = match pci_bus_id { - Ok(p) => p, - Err(e) => { - tracing::warn!("Failed to read PCI bus ID for card{}: {}", minor, e); - continue; - } - }; - // Extract PCI_SLOT_NAME from uevent content - let pci_bus_id = pci_bus_id - .lines() - .find_map(|line| { - if line.starts_with("PCI_SLOT_NAME=") { - Some(line.trim_start_matches("PCI_SLOT_NAME=").to_owned()) - } else { - None - } - }) - .ok_or("PCI_SLOT_NAME not found")?; - - // Get DRI device paths - if let Some((card_path, render_path)) = get_dri_device_path(pci_bus_id.as_str()) { - gpus.push(GPUInfo { - vendor: vendor.into(), - card_path, - render_path, - device_name, - pci_bus_id, - }); - } - } - - Ok(gpus) -} - -fn parse_pci_ids(pci_data: &str, vendor_id: &str, device_id: &str) -> Option { - let mut current_vendor = String::new(); - let vendor_id = vendor_id.to_lowercase(); - let device_id = device_id.to_lowercase(); - - for line in pci_data.lines() { - // Skip comments and empty lines - if line.starts_with('#') || line.is_empty() { - continue; - } - - // Check for vendor lines (no leading whitespace) - if !line.starts_with(['\t', ' ']) { - let mut parts = line.splitn(2, ' '); - if let (Some(vendor), Some(_)) = (parts.next(), parts.next()) { - current_vendor = vendor.to_lowercase(); - } - continue; - } - - // Check for device lines (leading whitespace) - let line = line.trim_start(); - let mut parts = line.splitn(2, ' '); - if let (Some(dev_id), Some(desc)) = (parts.next(), parts.next()) { - if dev_id.to_lowercase() == device_id && current_vendor == vendor_id { - return Some(desc.trim().to_owned()); - } - } - } - - None -} - -fn get_dri_device_path(pci_addr: &str) -> Option<(String, String)> { - let entries = fs::read_dir("/sys/bus/pci/devices").ok()?; - for entry in entries.flatten() { - if !entry.path().to_string_lossy().contains(&pci_addr) { - continue; - } - - let mut card = String::new(); - let mut render = String::new(); - let drm_path = entry.path().join("drm"); - - for drm_entry in fs::read_dir(drm_path).ok()?.flatten() { - let name = drm_entry.file_name().to_string_lossy().into_owned(); - - if name.starts_with("card") { - card = format!("/dev/dri/{}", name); - } else if name.starts_with("renderD") { - render = format!("/dev/dri/{}", name); - } - - if !card.is_empty() && !render.is_empty() { - break; - } - } - - if !card.is_empty() { - return Some((card, render)); - } - } - - None -} - -pub fn get_gpus_by_vendor(gpus: &[GPUInfo], vendor: GPUVendor) -> Vec { - gpus.iter() - .filter(|gpu| *gpu.vendor() == vendor) - .cloned() - .collect() -} - -pub fn get_gpus_by_device_name(gpus: &[GPUInfo], substring: &str) -> Vec { - let target = substring.to_lowercase(); - gpus.iter() - .filter(|gpu| gpu.device_name.to_lowercase().contains(&target)) - .cloned() - .collect() -} - -pub fn get_gpu_by_card_path(gpus: &[GPUInfo], path: &str) -> Option { - gpus.iter() - .find(|gpu| { - gpu.card_path.eq_ignore_ascii_case(path) || gpu.render_path.eq_ignore_ascii_case(path) - }) - .cloned() -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - #[ignore = "requires access to /sys/class/drm and a GPU; not suitable for default CI"] - fn test_get_gpus() { - let gpus = get_gpus().unwrap(); - // Environment-dependent; just print for manual runs. - if gpus.is_empty() { - eprintln!("No GPUs found; skipping assertions"); - return; - } - // Print the GPUs found for manual verification - for gpu in &gpus { - println!("{}", gpu); - } - } -} diff --git a/packages/server/src/input.rs b/packages/server/src/input.rs deleted file mode 100644 index cb9e0ac5..00000000 --- a/packages/server/src/input.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod controller; diff --git a/packages/server/src/input/controller.rs b/packages/server/src/input/controller.rs deleted file mode 100644 index 284c2e07..00000000 --- a/packages/server/src/input/controller.rs +++ /dev/null @@ -1,401 +0,0 @@ -use crate::proto::proto::ProtoControllerAttach; -use crate::proto::proto::proto_message::Payload; -use anyhow::Result; -use std::collections::HashMap; -use std::sync::Arc; -use tokio::sync::mpsc; - -fn controller_string_to_type(controller_type: &str) -> Result { - match controller_type.to_lowercase().as_str() { - "ps4" => Ok(vimputti::ControllerTemplates::ps4()), - "ps5" => Ok(vimputti::ControllerTemplates::ps5()), - "xbox360" => Ok(vimputti::ControllerTemplates::xbox360()), - "xboxone" => Ok(vimputti::ControllerTemplates::xbox_one()), - "switchpro" => Ok(vimputti::ControllerTemplates::switch_pro()), - _ => Err(anyhow::anyhow!( - "Unsupported controller type: {}", - controller_type - )), - } -} - -pub struct ControllerInput { - config: vimputti::DeviceConfig, - device: vimputti::client::VirtualController, -} -impl ControllerInput { - pub async fn new( - controller_type: String, - client: &vimputti::client::VimputtiClient, - ) -> Result { - let config = controller_string_to_type(&controller_type)?; - let device = client.create_device(config.clone()).await?; - Ok(Self { config, device }) - } - - pub fn device_mut(&mut self) -> &mut vimputti::client::VirtualController { - &mut self.device - } - - pub fn device(&self) -> &vimputti::client::VirtualController { - &self.device - } -} - -pub struct ControllerManager { - vimputti_client: Arc, - cmd_tx: mpsc::Sender, - rumble_tx: mpsc::Sender<(u32, u16, u16, u16, String)>, // (slot, strong, weak, duration_ms, session_id) - attach_tx: mpsc::Sender, -} -impl ControllerManager { - pub fn new( - vimputti_client: Arc, - ) -> Result<( - Self, - mpsc::Receiver<(u32, u16, u16, u16, String)>, - mpsc::Receiver, - )> { - let (cmd_tx, cmd_rx) = mpsc::channel(512); - let (rumble_tx, rumble_rx) = mpsc::channel(256); - let (attach_tx, attach_rx) = mpsc::channel(64); - tokio::spawn(command_loop( - cmd_rx, - vimputti_client.clone(), - rumble_tx.clone(), - attach_tx.clone(), - )); - Ok(( - Self { - vimputti_client, - cmd_tx, - rumble_tx, - attach_tx, - }, - rumble_rx, - attach_rx, - )) - } - - pub async fn send_command(&self, payload: Payload) -> Result<()> { - self.cmd_tx.send(payload).await?; - Ok(()) - } -} - -struct ControllerSlot { - controller: ControllerInput, - session_id: String, - session_slot: u32, -} - -// Returns first free controller slot from 0-16 -fn get_free_slot(controllers: &HashMap) -> Option { - for slot in 0..17 { - if !controllers.contains_key(&slot) { - return Some(slot); - } - } - None -} - -async fn command_loop( - mut cmd_rx: mpsc::Receiver, - vimputti_client: Arc, - rumble_tx: mpsc::Sender<(u32, u16, u16, u16, String)>, - attach_tx: mpsc::Sender, -) { - let mut controllers: HashMap = HashMap::new(); - while let Some(payload) = cmd_rx.recv().await { - match payload { - Payload::ControllerAttach(data) => { - let session_id = data.session_id.clone(); - let session_slot = data.session_slot.clone(); - - // Check if this session already has a slot (reconnection) - let existing_slot = controllers - .iter() - .find(|(_, slot)| { - slot.session_id == session_id && slot.session_slot == session_slot as u32 - }) - .map(|(slot_num, _)| *slot_num); - - if let Some(existing_slot) = existing_slot { - if let Some(controller_slot) = controllers.get_mut(&existing_slot) { - let rumble_tx = rumble_tx.clone(); - let attach_tx = attach_tx.clone(); - - controller_slot - .controller - .device_mut() - .on_rumble(move |strong, weak, duration_ms| { - let _ = rumble_tx.try_send(( - existing_slot, - strong, - weak, - duration_ms, - data.session_id.clone(), - )); - }) - .await - .map_err(|e| { - tracing::warn!( - "Failed to register rumble callback for slot {}: {}", - existing_slot, - e - ); - }) - .ok(); - - // Return to attach_tx what slot was assigned - let attach_info = ProtoControllerAttach { - id: data.id.clone(), - session_slot: existing_slot as i32, - session_id: session_id.clone(), - }; - - match attach_tx.send(attach_info).await { - Ok(_) => { - tracing::info!( - "Controller {} re-attached to slot {} (session: {})", - data.id, - existing_slot, - session_id - ); - } - Err(e) => { - tracing::error!( - "Failed to send re-attach info for slot {}: {}", - existing_slot, - e - ); - } - } - } - } else if let Some(slot) = get_free_slot(&controllers) { - if let Ok(mut controller) = - ControllerInput::new(data.id.clone(), &vimputti_client).await - { - let rumble_tx = rumble_tx.clone(); - let attach_tx = attach_tx.clone(); - - controller - .device_mut() - .on_rumble(move |strong, weak, duration_ms| { - let _ = rumble_tx.try_send(( - slot, - strong, - weak, - duration_ms, - data.session_id.clone(), - )); - }) - .await - .map_err(|e| { - tracing::warn!( - "Failed to register rumble callback for slot {}: {}", - slot, - e - ); - }) - .ok(); - - // Return to attach_tx what slot was assigned - let attach_info = ProtoControllerAttach { - id: data.id.clone(), - session_slot: slot as i32, - session_id: session_id.clone(), - }; - - match attach_tx.send(attach_info).await { - Ok(_) => { - controllers.insert( - slot, - ControllerSlot { - controller, - session_id: session_id.clone(), - session_slot: session_slot.clone() as u32, - }, - ); - tracing::info!( - "Controller {} attached to slot {} (session: {})", - data.id, - slot, - session_id - ); - } - Err(e) => { - tracing::error!( - "Failed to send attach info for slot {}: {}", - slot, - e - ); - } - } - } else { - tracing::error!( - "Failed to create controller of type {} for slot {}", - data.id, - slot - ); - } - } - } - Payload::ControllerDetach(data) => { - if controllers.remove(&(data.session_slot as u32)).is_some() { - tracing::info!("Controller detached from slot {}", data.session_slot); - } else { - tracing::warn!( - "No controller found in slot {} to detach", - data.session_slot - ); - } - } - Payload::ClientDisconnected(data) => { - tracing::info!( - "Client disconnected, cleaning up controller slots: {:?} (client session: {})", - data.controller_slots, - data.session_id - ); - // Remove all controllers for the disconnected slots - for slot in &data.controller_slots { - if controllers.remove(&(*slot as u32)).is_some() { - tracing::info!( - "Removed controller from slot {} (client session: {})", - slot, - data.session_id - ); - } else { - tracing::warn!( - "No controller found in slot {} to cleanup (client session: {})", - slot, - data.session_id - ); - } - } - } - Payload::ControllerStateBatch(data) => { - if let Some(controller) = controllers.get(&(data.session_slot as u32)) { - let device = controller.controller.device(); - - // Handle inputs based on update type - if data.update_type == 0 { - // FULL_STATE: Update all values - let _ = device.sync().await; - for (btn_code, pressed) in data.button_changed_mask { - if let Some(button) = vimputti::Button::from_ev_code(btn_code as u16) { - let _ = device.button(button, pressed).await; - let _ = device.sync().await; - } - } - if let Some(x) = data.left_stick_x { - let _ = device.axis(vimputti::Axis::LeftStickX, x).await; - let _ = device.sync().await; - } - if let Some(y) = data.left_stick_y { - let _ = device.axis(vimputti::Axis::LeftStickY, y).await; - let _ = device.sync().await; - } - if let Some(x) = data.right_stick_x { - let _ = device.axis(vimputti::Axis::RightStickX, x).await; - let _ = device.sync().await; - } - if let Some(y) = data.right_stick_y { - let _ = device.axis(vimputti::Axis::RightStickY, y).await; - let _ = device.sync().await; - } - if let Some(value) = data.left_trigger { - let _ = device.axis(vimputti::Axis::LowerLeftTrigger, value).await; - let _ = device.sync().await; - } - if let Some(value) = data.right_trigger { - let _ = device.axis(vimputti::Axis::LowerRightTrigger, value).await; - let _ = device.sync().await; - } - if let Some(x) = data.dpad_x { - let _ = device.axis(vimputti::Axis::DPadX, x).await; - let _ = device.sync().await; - } - if let Some(y) = data.dpad_y { - let _ = device.axis(vimputti::Axis::DPadY, y).await; - let _ = device.sync().await; - } - } else { - // DELTA: Only update changed values - if let Some(changed_fields) = data.changed_fields { - let _ = device.sync().await; - if (changed_fields & (1 << 0)) != 0 { - for (btn_code, pressed) in data.button_changed_mask { - if let Some(button) = - vimputti::Button::from_ev_code(btn_code as u16) - { - let _ = device.button(button, pressed).await; - let _ = device.sync().await; - } - } - } - if (changed_fields & (1 << 1)) != 0 { - if let Some(x) = data.left_stick_x { - let _ = device.axis(vimputti::Axis::LeftStickX, x).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 2)) != 0 { - if let Some(y) = data.left_stick_y { - let _ = device.axis(vimputti::Axis::LeftStickY, y).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 3)) != 0 { - if let Some(x) = data.right_stick_x { - let _ = device.axis(vimputti::Axis::RightStickX, x).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 4)) != 0 { - if let Some(y) = data.right_stick_y { - let _ = device.axis(vimputti::Axis::RightStickY, y).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 5)) != 0 { - if let Some(value) = data.left_trigger { - let _ = - device.axis(vimputti::Axis::LowerLeftTrigger, value).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 6)) != 0 { - if let Some(value) = data.right_trigger { - let _ = - device.axis(vimputti::Axis::LowerRightTrigger, value).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 7)) != 0 { - if let Some(x) = data.dpad_x { - let _ = device.axis(vimputti::Axis::DPadX, x).await; - let _ = device.sync().await; - } - } - if (changed_fields & (1 << 8)) != 0 { - if let Some(y) = data.dpad_y { - let _ = device.axis(vimputti::Axis::DPadY, y).await; - let _ = device.sync().await; - } - } - } - } - } else { - tracing::warn!( - "Controller slot {} not found for state batch event", - data.session_slot - ); - } - } - _ => { - //no-op - } - } - } -} diff --git a/packages/server/src/latency.rs b/packages/server/src/latency.rs deleted file mode 100644 index 8e3f3340..00000000 --- a/packages/server/src/latency.rs +++ /dev/null @@ -1,60 +0,0 @@ -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; - -#[derive(Serialize, Deserialize, Debug)] -pub struct TimestampEntry { - pub stage: String, - pub time: String, // ISO 8601 timestamp -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct LatencyTracker { - pub sequence_id: String, - pub timestamps: Vec, - pub metadata: Option>, // Optional metadata -} - -impl LatencyTracker { - // Creates a new LatencyTracker - pub fn new(sequence_id: String) -> Self { - Self { - sequence_id, - timestamps: Vec::new(), - metadata: None, - } - } - - // Returns the sequence ID - pub fn sequence_id(&self) -> &str { - &self.sequence_id - } - - // Adds a timestamp for a specific stage - pub fn add_timestamp(&mut self, stage: &str) { - // Ensure extremely precise UTC format (YYYY-MM-DDTHH:MM:SS.658548387Z) - let now = chrono::Utc::now().to_rfc3339_opts(chrono::SecondsFormat::Nanos, true); - self.timestamps.push(TimestampEntry { - stage: stage.to_string(), - time: now, - }); - } - - // Calculate total latency (first to last timestamp) - pub fn total_latency(&self) -> Option { - if self.timestamps.len() < 2 { - return None; - } - let parsed_times: Result, _> = self - .timestamps - .iter() - .map(|entry| chrono::DateTime::parse_from_rfc3339(&entry.time)) - .collect(); - if let Ok(parsed_times) = parsed_times { - let min_time = parsed_times.iter().min().unwrap(); - let max_time = parsed_times.iter().max().unwrap(); - Some((*max_time - *min_time).num_milliseconds()) - } else { - None - } - } -} diff --git a/packages/server/src/main.rs b/packages/server/src/main.rs deleted file mode 100644 index 0fdeef75..00000000 --- a/packages/server/src/main.rs +++ /dev/null @@ -1,642 +0,0 @@ -mod args; -mod enc_helper; -mod gpu; -mod input; -mod latency; -mod nestrisink; -mod p2p; -mod proto; - -use crate::args::encoding_args; -use crate::args::encoding_args::LatencyControl; -use crate::enc_helper::{EncoderAPI, EncoderType}; -use crate::gpu::{GPUInfo, GPUVendor}; -use crate::input::controller::ControllerManager; -use crate::nestrisink::NestriSignaller; -use crate::p2p::p2p::NestriP2P; -use gstreamer::prelude::*; -use gstrswebrtc::signaller::Signallable; -use gstrswebrtc::webrtcsink::BaseWebRTCSink; -use std::error::Error; -use std::str::FromStr; -use std::sync::Arc; -use tokio_stream::StreamExt; -use tracing_subscriber::EnvFilter; -use tracing_subscriber::filter::LevelFilter; - -// Handles gathering GPU information and selecting the most suitable GPU -fn handle_gpus(args: &args::Args) -> Result, Box> { - tracing::info!("Gathering GPU information.."); - let mut gpus = gpu::get_gpus()?; - if gpus.is_empty() { - return Err("No GPUs found".into()); - } - for (i, gpu) in gpus.iter().enumerate() { - tracing::info!("> [GPU:{}] {}", i, gpu); - } - - // Additional GPU filtering - if let Some(gpu_card_path) = &args.device.gpu_card_path { - return match gpu::get_gpu_by_card_path(&gpus, gpu_card_path.as_str()) { - Some(gpu) => Ok(Vec::from([gpu])), - None => Err(format!( - "No GPU found with the specified card path: '{}'", - gpu_card_path - ) - .into()), - }; - } else { - // Run all filters that are not empty - let mut filtered_gpus = gpus.clone(); - if let Some(gpu_vendor) = &args.device.gpu_vendor { - filtered_gpus = - gpu::get_gpus_by_vendor(&filtered_gpus, GPUVendor::from(gpu_vendor.clone())); - } - if let Some(gpu_name) = &args.device.gpu_name { - filtered_gpus = gpu::get_gpus_by_device_name(&filtered_gpus, gpu_name.as_str()); - } - if let Some(gpu_index) = &args.device.gpu_index { - // get single GPU by index - let gpu_index = *gpu_index as usize; - if gpu_index >= filtered_gpus.len() { - return Err(format!( - "GPU index {} is out of bounds for available GPUs (0-{})", - gpu_index, - filtered_gpus.len().saturating_sub(1) - ) - .into()); - } - gpus = Vec::from([filtered_gpus[gpu_index].clone()]); - } else { - // Filter out unknown vendor GPUs - gpus = filtered_gpus - .into_iter() - .filter(|gpu| *gpu.vendor() != GPUVendor::UNKNOWN) - .collect(); - } - } - if gpus.is_empty() { - return Err(format!( - "No GPU(s) found with the specified parameters: vendor='{}', name='{}', index='{}', card_path='{}'", - args.device.gpu_vendor.as_deref().unwrap_or("auto"), - args.device.gpu_name.as_deref().unwrap_or("auto"), - args.device.gpu_index.map_or("auto".to_string(), |i| i.to_string()), - args.device.gpu_card_path.as_deref().unwrap_or("auto") - ).into()); - } - Ok(gpus) -} - -// Handles picking video encoder -fn handle_encoder_video( - args: &args::Args, - gpus: &Vec, -) -> Result> { - tracing::info!("Getting compatible video encoders.."); - let video_encoders = enc_helper::get_compatible_encoders(gpus); - if video_encoders.is_empty() { - return Err("No compatible video encoders found".into()); - } - for encoder in &video_encoders { - tracing::info!( - "> [Video Encoder] Name: '{}', Codec: '{}', API: '{}', Type: '{}', Device: '{}'", - encoder.name, - encoder.codec.as_str(), - encoder.encoder_api.to_str(), - encoder.encoder_type.as_str(), - if let Some(gpu) = &encoder.gpu_info { - gpu.device_name() - } else { - "CPU" - }, - ); - } - // Pick most suitable video encoder based on given arguments - let video_encoder; - if let Some(wanted_encoder) = &args.encoding.video.encoder { - video_encoder = enc_helper::get_encoder_by_name(&video_encoders, wanted_encoder.as_str())?; - } else { - video_encoder = enc_helper::get_best_working_encoder( - &video_encoders, - &args.encoding.video.codec, - &args.encoding.video.encoder_type, - )?; - } - tracing::info!("Selected video encoder: '{}'", video_encoder.name); - Ok(video_encoder) -} - -// Handles picking preferred settings for video encoder -fn handle_encoder_video_settings( - args: &args::Args, - video_encoder: &enc_helper::VideoEncoderInfo, -) -> enc_helper::VideoEncoderInfo { - let mut optimized_encoder = match args.encoding.video.latency_control { - LatencyControl::LowestLatency => enc_helper::encoder_low_latency_params( - &video_encoder, - &args.encoding.video.rate_control, - args.app.framerate, - args.encoding.video.keyframe_dist_secs, - ), - LatencyControl::HighestQuality => enc_helper::encoder_high_quality_params( - &video_encoder, - &args.encoding.video.rate_control, - args.app.framerate, - args.encoding.video.keyframe_dist_secs, - ), - }; - // Handle rate-control method - match &args.encoding.video.rate_control { - encoding_args::RateControl::CQP(cqp) => { - optimized_encoder = enc_helper::encoder_cqp_params(&optimized_encoder, cqp.quality); - } - encoding_args::RateControl::VBR(vbr) => { - optimized_encoder = enc_helper::encoder_vbr_params( - &optimized_encoder, - vbr.target_bitrate, - vbr.max_bitrate, - ); - } - encoding_args::RateControl::CBR(cbr) => { - optimized_encoder = - enc_helper::encoder_cbr_params(&optimized_encoder, cbr.target_bitrate); - } - } - tracing::info!( - "Selected video encoder settings: '{}'", - optimized_encoder.get_parameters_string() - ); - optimized_encoder -} - -// Handles picking audio encoder -// TODO: Expand enc_helper with audio types, for now just opus -fn handle_encoder_audio(args: &args::Args) -> String { - let audio_encoder = args - .encoding - .audio - .encoder - .clone() - .unwrap_or_else(|| "opusenc".to_string()); - tracing::info!("Selected audio encoder: '{}'", audio_encoder); - audio_encoder -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - tracing_subscriber::fmt() - .with_env_filter( - EnvFilter::builder() - .with_default_directive(LevelFilter::INFO.into()) - .from_env()?, - ) - .init(); - - // Parse command line arguments - let mut args = args::Args::new(); - - if args.app.verbose { - args.debug_print(); - } - - rustls::crypto::ring::default_provider() - .install_default() - .expect("Failed to install ring crypto provider"); - - // Get relay URL from arguments - let relay_url = args.app.relay_url.trim(); - - gstreamer::init()?; - let _ = gstrswebrtc::plugin_register_static(); // Might be already registered, so we'll pass.. - - if args.app.zero_copy { - if args.encoding.video.encoder_type != EncoderType::HARDWARE { - tracing::warn!( - "zero-copy is only supported with hardware encoders, disabling zero-copy.." - ); - args.app.zero_copy = false; - } else { - tracing::warn!( - "zero-copy is experimental, it may or may not improve performance, or even work at all." - ); - } - } - - // Handle GPU selection - let gpus = match handle_gpus(&args) { - Ok(gpu) => gpu, - Err(e) => { - tracing::error!("Failed to find a suitable GPU: {}", e); - return Err(e); - } - }; - - // Handle video encoder selection - let mut video_encoder_info = match handle_encoder_video(&args, &gpus) { - Ok(encoder) => encoder, - Err(e) => { - tracing::error!("Failed to find a suitable video encoder: {}", e); - return Err(e); - } - }; - - // Handle video encoder settings - video_encoder_info = handle_encoder_video_settings(&args, &video_encoder_info); - - // Handle audio encoder selection - let audio_encoder = handle_encoder_audio(&args); - - // Initialize libp2p (logically the sink should handle the connection to be independent) - let nestri_p2p = Arc::new(NestriP2P::new().await?); - let p2p_conn = nestri_p2p.connect(relay_url).await?; - - // Get vimputti manager connection if available - let vpath = match args.app.vimputti_path { - Some(ref path) => path.clone(), - None => "/tmp/vimputti-0".to_string(), - }; - let vimputti_client = match vimputti::VimputtiClient::connect(vpath).await { - Ok(client) => { - tracing::info!("Connected to vimputti manager"); - Some(Arc::new(client)) - } - Err(e) => { - tracing::warn!("Failed to connect to vimputti manager: {}", e); - None - } - }; - let (controller_manager, rumble_rx, attach_rx) = if let Some(vclient) = vimputti_client { - let (controller_manager, rumble_rx, attach_rx) = ControllerManager::new(vclient)?; - ( - Some(Arc::new(controller_manager)), - Some(rumble_rx), - Some(attach_rx), - ) - } else { - (None, None, None) - }; - - /*** PIPELINE CREATION ***/ - // Create the pipeline - let pipeline = Arc::new(gstreamer::Pipeline::new()); - - /* Audio */ - // Audio Source Element - let audio_source = match args.encoding.audio.capture_method { - encoding_args::AudioCaptureMethod::PULSEAUDIO => { - gstreamer::ElementFactory::make("pulsesrc").build()? - } - encoding_args::AudioCaptureMethod::PIPEWIRE => { - let pw_element = gstreamer::ElementFactory::make("pipewiresrc").build()?; - pw_element.set_property("use-bufferpool", &false); // false for audio - pw_element - } - encoding_args::AudioCaptureMethod::ALSA => { - gstreamer::ElementFactory::make("alsasrc").build()? - } - }; - - // Audio Converter Element - let audio_converter = gstreamer::ElementFactory::make("audioconvert").build()?; - - // Audio Rate Element - let audio_rate = gstreamer::ElementFactory::make("audiorate").build()?; - - // Required to fix gstreamer opus issue, where quality sounds off (due to wrong sample rate) - let audio_capsfilter = gstreamer::ElementFactory::make("capsfilter").build()?; - let audio_caps = gstreamer::Caps::from_str("audio/x-raw,rate=48000,channels=2")?; - audio_capsfilter.set_property("caps", &audio_caps); - - // Audio Encoder Element - let audio_encoder = gstreamer::ElementFactory::make(audio_encoder.as_str()).build()?; - audio_encoder.set_property( - "bitrate", - &match &args.encoding.audio.rate_control { - encoding_args::RateControl::CBR(cbr) => cbr.target_bitrate.saturating_mul(1000) as i32, - encoding_args::RateControl::VBR(vbr) => vbr.target_bitrate.saturating_mul(1000) as i32, - _ => 128000i32, - }, - ); - // If has "frame-size" (opus), set to 10 for lower latency (below 10 seems to be too low?) - if audio_encoder.has_property("frame-size") { - audio_encoder.set_property_from_str("frame-size", "10"); - } - - // Audio parse Element - let mut audio_parser = None; - if audio_encoder.name() == "opusenc" { - // Opus encoder requires a parser - audio_parser = Some(gstreamer::ElementFactory::make("opusparse").build()?); - } - - /* Video */ - // Video Source Element - let video_source = Arc::new(gstreamer::ElementFactory::make("waylanddisplaysrc").build()?); - if args.app.software_render { - video_source.set_property_from_str("render-node", "software"); - } else if let Some(gpu_info) = &video_encoder_info.gpu_info { - video_source.set_property_from_str("render-node", gpu_info.render_path()); - } - - // Caps Filter Element (resolution, fps) - let caps_filter = gstreamer::ElementFactory::make("capsfilter").build()?; - let caps = gstreamer::Caps::from_str(&format!( - "{},width={},height={},framerate={}/1{}", - if args.app.zero_copy { - if video_encoder_info.encoder_api == EncoderAPI::NVENC { - "video/x-raw(memory:CUDAMemory)" - } else { - "video/x-raw(memory:DMABuf)" - } - } else { - "video/x-raw" - }, - args.app.resolution.0, - args.app.resolution.1, - args.app.framerate, - if args.app.zero_copy { - "" - } else { - ",format=RGBx" - } - ))?; - caps_filter.set_property("caps", &caps); - - // Get bit-depth and choose appropriate format (NV12 or P010_10LE) - // H.264 does not support above 8-bit. Also we require DMA-BUF. - let video_format = if args.encoding.video.bit_depth == 10 - && args.app.zero_copy - && video_encoder_info.codec != enc_helper::VideoCodec::H264 - { - "P010_10LE" - } else { - "NV12" - }; - - // vapostproc for VA compatible encoders - let mut vapostproc = None; - let mut va_caps_filter = None; - if video_encoder_info.encoder_api == EncoderAPI::VAAPI - || video_encoder_info.encoder_api == EncoderAPI::QSV - { - vapostproc = Some(gstreamer::ElementFactory::make("vapostproc").build()?); - // VA caps filter - let caps_filter = gstreamer::ElementFactory::make("capsfilter").build()?; - let va_caps = gstreamer::Caps::from_str( - format!("video/x-raw(memory:VAMemory),format={video_format}").as_str(), - )?; - caps_filter.set_property("caps", &va_caps); - va_caps_filter = Some(caps_filter); - } - - // Video Converter Element - let mut video_converter = None; - if !args.app.zero_copy { - video_converter = Some(gstreamer::ElementFactory::make("videoconvert").build()?); - } - - // Video Encoder Element - let video_encoder = - gstreamer::ElementFactory::make(video_encoder_info.name.as_str()).build()?; - video_encoder_info.apply_parameters(&video_encoder, args.app.verbose); - - // Video parser Element - let video_parser; - match video_encoder_info.codec { - enc_helper::VideoCodec::H264 => { - video_parser = Some( - gstreamer::ElementFactory::make("h264parse") - .property("config-interval", -1i32) - .build()?, - ); - } - enc_helper::VideoCodec::H265 => { - video_parser = Some( - gstreamer::ElementFactory::make("h265parse") - .property("config-interval", -1i32) - .build()?, - ); - } - _ => { - video_parser = None; - } - } - - /* Output */ - // WebRTC sink Element - let signaller = NestriSignaller::new( - args.app.room, - p2p_conn.clone(), - video_source.clone(), - controller_manager, - rumble_rx, - attach_rx, - ) - .await?; - let webrtcsink = BaseWebRTCSink::with_signaller(Signallable::from(signaller.clone())); - webrtcsink.set_property_from_str("stun-server", "stun://stun.l.google.com:19302"); - webrtcsink.set_property_from_str("congestion-control", "disabled"); - webrtcsink.set_property("do-retransmission", false); - - /* Queues */ - // Sink queues - let video_sink_queue = gstreamer::ElementFactory::make("queue").build()?; - let audio_sink_queue = gstreamer::ElementFactory::make("queue").build()?; - - // Source queues - let video_source_queue = gstreamer::ElementFactory::make("queue") - .property("max-size-buffers", 2u32) - .property("max-size-time", 0u64) - .property("max-size-bytes", 0u32) - .build()?; - let audio_source_queue = gstreamer::ElementFactory::make("queue") - .property("max-size-buffers", 2u32) - .property("max-size-time", 0u64) - .property("max-size-bytes", 0u32) - .build()?; - - // Add elements to the pipeline - pipeline.add_many(&[ - webrtcsink.upcast_ref(), - &video_sink_queue, - &audio_sink_queue, - &video_encoder, - &caps_filter, - &video_source_queue, - &video_source, - &audio_encoder, - &audio_capsfilter, - &audio_source_queue, - &audio_rate, - &audio_converter, - &audio_source, - ])?; - - if let Some(video_converter) = &video_converter { - pipeline.add(video_converter)?; - } - - if let Some(parser) = &audio_parser { - pipeline.add(parser)?; - } - - if let Some(parser) = &video_parser { - pipeline.add(parser)?; - } - - // If zero-copy.. - if args.app.zero_copy { - // VA-API / QSV pipeline - if let (Some(vapostproc), Some(va_caps_filter)) = (&vapostproc, &va_caps_filter) { - pipeline.add_many(&[vapostproc, va_caps_filter])?; - } - } - - // Link main audio branch - gstreamer::Element::link_many(&[ - &audio_source, - &audio_converter, - &audio_rate, - &audio_capsfilter, - &audio_source_queue, - &audio_encoder, - ])?; - - // Link audio parser to audio encoder if present, otherwise just webrtcsink - if let Some(parser) = &audio_parser { - gstreamer::Element::link_many(&[ - &audio_encoder, - parser, - &audio_sink_queue, - webrtcsink.upcast_ref(), - ])?; - } else { - gstreamer::Element::link_many(&[ - &audio_encoder, - &audio_sink_queue, - webrtcsink.upcast_ref(), - ])?; - } - - // With zero-copy.. - if args.app.zero_copy { - // VA-API / QSV pipeline - if let (Some(vapostproc), Some(va_caps_filter)) = (&vapostproc, &va_caps_filter) { - gstreamer::Element::link_many(&[ - &video_source, - &caps_filter, - &video_source_queue, - &vapostproc, - &va_caps_filter, - &video_encoder, - ])?; - } else if video_encoder_info.encoder_api == EncoderAPI::NVENC { - // NVENC pipeline - gstreamer::Element::link_many(&[&video_source, &caps_filter, &video_encoder])?; - } - } else { - gstreamer::Element::link_many(&[ - &video_source, - &caps_filter, - &video_source_queue, - &video_converter.unwrap(), - &video_encoder, - ])?; - } - - // Link video parser if present with webrtcsink, otherwise just link webrtc sink - if let Some(parser) = &video_parser { - gstreamer::Element::link_many(&[ - &video_encoder, - parser, - &video_sink_queue, - webrtcsink.upcast_ref(), - ])?; - } else { - gstreamer::Element::link_many(&[ - &video_encoder, - &video_sink_queue, - webrtcsink.upcast_ref(), - ])?; - } - - video_source.set_property("do-timestamp", &false); - audio_source.set_property("do-timestamp", &false); - - // Optimize latency of pipeline - pipeline.set_property("latency", &0u64); - pipeline.set_property("async-handling", true); - pipeline.set_property("message-forward", true); - - // Run both pipeline and websocket tasks concurrently - let result = run_pipeline(pipeline.clone()).await; - - match result { - Ok(_) => tracing::info!("All tasks finished"), - Err(e) => { - tracing::error!("Error occurred in one of the tasks: {}", e); - return Err("Error occurred in one of the tasks".into()); - } - } - - // Clean up - tracing::info!("Exiting gracefully.."); - - Ok(()) -} - -async fn run_pipeline(pipeline: Arc) -> Result<(), Box> { - let bus = { pipeline.bus().ok_or("Pipeline has no bus")? }; - - { - if let Err(e) = pipeline.set_state(gstreamer::State::Playing) { - tracing::error!("Failed to start pipeline: {}", e); - return Err("Failed to start pipeline".into()); - } - } - - // Wait for EOS or error (don't lock the pipeline indefinitely) - tokio::select! { - _ = tokio::signal::ctrl_c() => { - tracing::info!("Pipeline interrupted via Ctrl+C"); - } - result = listen_for_gst_messages(bus) => { - match result { - Ok(_) => tracing::info!("Pipeline finished with EOS"), - Err(err) => tracing::error!("Pipeline error: {}", err), - } - } - } - - { - pipeline.set_state(gstreamer::State::Null)?; - } - - Ok(()) -} - -async fn listen_for_gst_messages(bus: gstreamer::Bus) -> Result<(), Box> { - let bus_stream = bus.stream(); - - tokio::pin!(bus_stream); - - while let Some(msg) = bus_stream.next().await { - match msg.view() { - gstreamer::MessageView::Eos(_) => { - tracing::info!("Received EOS"); - break; - } - gstreamer::MessageView::Error(err) => { - let err_msg = format!( - "Error from {:?}: {:?}", - err.src().map(|s| s.path_string()), - err.error() - ); - return Err(err_msg.into()); - } - _ => (), - } - } - - Ok(()) -} diff --git a/packages/server/src/nestrisink/imp.rs b/packages/server/src/nestrisink/imp.rs deleted file mode 100644 index 88937411..00000000 --- a/packages/server/src/nestrisink/imp.rs +++ /dev/null @@ -1,537 +0,0 @@ -use crate::input::controller::ControllerManager; -use crate::p2p::p2p::NestriConnection; -use crate::p2p::p2p_protocol_stream::NestriStreamProtocol; -use crate::proto::proto::proto_message::Payload; -use crate::proto::proto::{ - ProtoControllerAttach, ProtoControllerRumble, ProtoIce, ProtoMessage, ProtoSdp, - ProtoServerPushStream, RtcIceCandidateInit, RtcSessionDescriptionInit, -}; -use anyhow::Result; -use glib::subclass::prelude::*; -use gstreamer::glib; -use gstreamer::prelude::*; -use gstreamer_webrtc::{WebRTCSDPType, WebRTCSessionDescription, gst_sdp}; -use gstrswebrtc::signaller::{Signallable, SignallableImpl}; -use parking_lot::RwLock as PLRwLock; -use prost::Message; -use std::sync::{Arc, LazyLock}; -use tokio::sync::{Mutex, mpsc}; - -pub struct Signaller { - stream_room: PLRwLock>, - stream_protocol: PLRwLock>>, - wayland_src: PLRwLock>>, - data_channel: PLRwLock>>, - controller_manager: PLRwLock>>, - rumble_rx: Mutex>>, - attach_rx: Mutex>>, -} -impl Default for Signaller { - fn default() -> Self { - Self { - stream_room: PLRwLock::new(None), - stream_protocol: PLRwLock::new(None), - wayland_src: PLRwLock::new(None), - data_channel: PLRwLock::new(None), - controller_manager: PLRwLock::new(None), - rumble_rx: Mutex::new(None), - attach_rx: Mutex::new(None), - } - } -} -impl Signaller { - pub async fn set_nestri_connection(&self, nestri_conn: NestriConnection) -> Result<()> { - let stream_protocol = NestriStreamProtocol::new(nestri_conn).await?; - *self.stream_protocol.write() = Some(Arc::new(stream_protocol)); - Ok(()) - } - - pub fn set_stream_room(&self, room: String) { - *self.stream_room.write() = Some(room); - } - - fn get_stream_protocol(&self) -> Option> { - self.stream_protocol.read().clone() - } - - pub fn set_wayland_src(&self, wayland_src: Arc) { - *self.wayland_src.write() = Some(wayland_src); - } - - pub fn get_wayland_src(&self) -> Option> { - self.wayland_src.read().clone() - } - - pub fn set_controller_manager(&self, controller_manager: Arc) { - *self.controller_manager.write() = Some(controller_manager); - } - - pub fn get_controller_manager(&self) -> Option> { - self.controller_manager.read().clone() - } - - pub async fn set_rumble_rx(&self, rumble_rx: mpsc::Receiver<(u32, u16, u16, u16, String)>) { - *self.rumble_rx.lock().await = Some(rumble_rx); - } - - pub async fn take_rumble_rx(&self) -> Option> { - self.rumble_rx.lock().await.take() - } - - pub async fn set_attach_rx( - &self, - attach_rx: mpsc::Receiver, - ) { - *self.attach_rx.lock().await = Some(attach_rx); - } - - pub async fn take_attach_rx( - &self, - ) -> Option> { - self.attach_rx.lock().await.take() - } - - pub fn set_data_channel(&self, data_channel: gstreamer_webrtc::WebRTCDataChannel) { - *self.data_channel.write() = Some(Arc::new(data_channel)); - } - - pub fn get_data_channel(&self) -> Option> { - self.data_channel.read().clone() - } - - /// Helper method to clean things up - fn register_callbacks(&self) { - let Some(stream_protocol) = self.get_stream_protocol() else { - gstreamer::error!(gstreamer::CAT_DEFAULT, "Stream protocol not set"); - return; - }; - { - let self_obj = self.obj().clone(); - stream_protocol.register_callback("answer", move |msg| { - if let Some(payload) = msg.payload { - match payload { - Payload::Sdp(sdp) => { - if let Some(sdp) = sdp.sdp { - let sdp = gst_sdp::SDPMessage::parse_buffer(sdp.sdp.as_bytes()) - .map_err(|e| { - anyhow::anyhow!("Invalid SDP in 'answer': {e:?}") - })?; - let answer = - WebRTCSessionDescription::new(WebRTCSDPType::Answer, sdp); - return Ok(self_obj.emit_by_name::<()>( - "session-description", - &[&"unique-session-id", &answer], - )); - } - } - _ => { - tracing::warn!("Unexpected payload type for answer"); - return Ok(()); - } - } - } else { - anyhow::bail!("Failed to decode answer message"); - } - Ok(()) - }); - } - { - let self_obj = self.obj().clone(); - stream_protocol.register_callback("ice-candidate", move |msg| { - if let Some(payload) = msg.payload { - match payload { - Payload::Ice(ice) => { - if let Some(candidate) = ice.candidate { - let sdp_m_line_index = candidate.sdp_m_line_index.unwrap_or(0); - return Ok(self_obj.emit_by_name::<()>( - "handle-ice", - &[ - &"unique-session-id", - &sdp_m_line_index, - &candidate.sdp_mid, - &candidate.candidate, - ], - )); - } - } - _ => { - tracing::warn!("Unexpected payload type for ice-candidate"); - return Ok(()); - } - } - } else { - anyhow::bail!("Failed to decode ICE message"); - } - Ok(()) - }); - } - { - let self_obj = self.obj().clone(); - stream_protocol.register_callback("push-stream-ok", move |msg| { - if let Some(payload) = msg.payload { - return match payload { - Payload::ServerPushStream(_res) => { - // Send our SDP offer - Ok(self_obj.emit_by_name::<()>( - "session-requested", - &[ - &"unique-session-id", - &"consumer-identifier", - &None::, - ], - )) - } - _ => { - tracing::warn!("Unexpected payload type for push-stream-ok"); - Ok(()) - } - }; - } else { - anyhow::bail!("Failed to decode answer"); - } - }); - } - { - let self_obj = self.obj().clone(); - // After creating webrtcsink - self_obj.connect_closure( - "webrtcbin-ready", - false, - glib::closure!( - move |signaller: &super::NestriSignaller, - _consumer_identifier: &str, - webrtcbin: &gstreamer::Element| { - gstreamer::info!(gstreamer::CAT_DEFAULT, "Adding data channels"); - // Create data channels on webrtcbin - let data_channel = Some( - webrtcbin.emit_by_name::( - "create-data-channel", - &[ - &"nestri-data-channel", - &gstreamer::Structure::builder("config") - .field("ordered", &true) - .field("max-retransmits", &2u32) - .field("priority", "high") - .field("protocol", "raw") - .build(), - ], - ), - ); - if let Some(data_channel) = data_channel { - gstreamer::info!(gstreamer::CAT_DEFAULT, "Data channel created"); - if let Some(wayland_src) = signaller.imp().get_wayland_src() { - signaller.imp().set_data_channel(data_channel.clone()); - - let signaller = signaller.clone(); - let data_channel = Arc::new(data_channel); - let wayland_src = wayland_src.clone(); - - // Spawn async task to take the receiver and set up - tokio::spawn(async move { - let rumble_rx = signaller.imp().take_rumble_rx().await; - let attach_rx = signaller.imp().take_attach_rx().await; - let controller_manager = - signaller.imp().get_controller_manager(); - - setup_data_channel( - controller_manager, - rumble_rx, - attach_rx, - data_channel, - &wayland_src, - ); - }); - } else { - gstreamer::error!( - gstreamer::CAT_DEFAULT, - "Wayland display source not set" - ); - } - } else { - gstreamer::error!( - gstreamer::CAT_DEFAULT, - "Failed to create data channel" - ); - } - } - ), - ); - } - } -} -impl SignallableImpl for Signaller { - fn start(&self) { - gstreamer::info!(gstreamer::CAT_DEFAULT, "Signaller started"); - - // Register message callbacks - self.register_callbacks(); - - // Subscribe to reconnection notifications - // TODO: Re-implement reconnection handling - - let Some(stream_room) = self.stream_room.read().clone() else { - gstreamer::error!(gstreamer::CAT_DEFAULT, "Stream room not set"); - return; - }; - - let Some(stream_protocol) = self.get_stream_protocol() else { - gstreamer::error!(gstreamer::CAT_DEFAULT, "Stream protocol not set"); - return; - }; - - let push_msg = crate::proto::create_message( - Payload::ServerPushStream(ProtoServerPushStream { - room_name: stream_room, - }), - "push-stream-room", - None, - ); - if let Err(e) = stream_protocol.send_message(&push_msg) { - tracing::error!("Failed to send push stream room message: {:?}", e); - } - } - - fn stop(&self) { - gstreamer::info!(gstreamer::CAT_DEFAULT, "Signaller stopped"); - } - - fn send_sdp(&self, _session_id: &str, sdp: &WebRTCSessionDescription) { - let Some(stream_protocol) = self.get_stream_protocol() else { - gstreamer::error!(gstreamer::CAT_DEFAULT, "Stream protocol not set"); - return; - }; - - let sdp_msg = crate::proto::create_message( - Payload::Sdp(ProtoSdp { - sdp: Some(RtcSessionDescriptionInit { - sdp: sdp.sdp().as_text().unwrap(), - r#type: "offer".to_string(), - }), - }), - "offer", - None, - ); - if let Err(e) = stream_protocol.send_message(&sdp_msg) { - tracing::error!("Failed to send SDP message: {:?}", e); - } - } - - fn add_ice( - &self, - _session_id: &str, - candidate: &str, - sdp_m_line_index: u32, - sdp_mid: Option, - ) { - let Some(stream_protocol) = self.get_stream_protocol() else { - gstreamer::error!(gstreamer::CAT_DEFAULT, "Stream protocol not set"); - return; - }; - - let candidate_init = RtcIceCandidateInit { - candidate: candidate.to_string(), - sdp_mid, - sdp_m_line_index: Some(sdp_m_line_index), - ..Default::default() //username_fragment: Some(session_id.to_string()), TODO: required? - }; - let ice_msg = crate::proto::create_message( - Payload::Ice(ProtoIce { - candidate: Some(candidate_init), - }), - "ice-candidate", - None, - ); - if let Err(e) = stream_protocol.send_message(&ice_msg) { - tracing::error!("Failed to send ICE candidate message: {:?}", e); - } - } - - fn end_session(&self, session_id: &str) { - gstreamer::info!(gstreamer::CAT_DEFAULT, "Ending session: {}", session_id); - } -} -#[glib::object_subclass] -impl ObjectSubclass for Signaller { - const NAME: &'static str = "NestriSignaller"; - type Type = super::NestriSignaller; - type ParentType = glib::Object; - type Interfaces = (Signallable,); -} -impl ObjectImpl for Signaller { - fn properties() -> &'static [glib::ParamSpec] { - static PROPS: LazyLock> = LazyLock::new(|| { - vec![ - glib::ParamSpecBoolean::builder("manual-sdp-munging") - .nick("Manual SDP munging") - .blurb("Whether the signaller manages SDP munging itself") - .default_value(false) - .read_only() - .build(), - ] - }); - - PROPS.as_ref() - } - fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value { - match pspec.name() { - "manual-sdp-munging" => false.to_value(), - _ => unimplemented!(), - } - } -} - -fn setup_data_channel( - controller_manager: Option>, - rumble_rx: Option>, // (slot, strong, weak, duration_ms, session_id) - attach_rx: Option>, - data_channel: Arc, - wayland_src: &gstreamer::Element, -) { - let wayland_src = wayland_src.clone(); - let (tx, mut rx) = mpsc::unbounded_channel::>(); - - // Spawn async processor - tokio::spawn(async move { - while let Some(data) = rx.recv().await { - match ProtoMessage::decode(data.as_slice()) { - Ok(msg_wrapper) => { - if let Some(message_base) = msg_wrapper.message_base { - if message_base.payload_type == "input" { - if let Some(input_data) = msg_wrapper.payload { - if let Some(event) = handle_input_message(input_data) { - // Send the event to wayland source, result bool is ignored - let _ = wayland_src.send_event(event); - } - } - } else if message_base.payload_type == "controllerInput" { - if let Some(controller_manager) = &controller_manager { - if let Some(input_data) = msg_wrapper.payload { - let _ = controller_manager.send_command(input_data).await; - } - } - } - } - } - Err(e) => { - tracing::error!("Failed to decode input message: {:?}", e); - } - } - } - }); - - // Spawn rumble sender - if let Some(mut rumble_rx) = rumble_rx { - let data_channel_clone = data_channel.clone(); - tokio::spawn(async move { - while let Some((slot, strong, weak, duration_ms, session_id)) = rumble_rx.recv().await { - let rumble_msg = crate::proto::create_message( - Payload::ControllerRumble(ProtoControllerRumble { - session_slot: slot as i32, - session_id: session_id, - low_frequency: weak as i32, - high_frequency: strong as i32, - duration: duration_ms as i32, - }), - "controllerInput", - None, - ); - - let data = rumble_msg.encode_to_vec(); - let bytes = glib::Bytes::from_owned(data); - - if let Err(e) = data_channel_clone.send_data_full(Some(&bytes)) { - tracing::warn!("Failed to send rumble data: {}", e); - } - } - }); - } - - // Spawn attach sender - if let Some(mut attach_rx) = attach_rx { - let data_channel_clone = data_channel.clone(); - tokio::spawn(async move { - while let Some(attach_msg) = attach_rx.recv().await { - let proto_msg = crate::proto::create_message( - Payload::ControllerAttach(attach_msg), - "controllerInput", - None, - ); - - let data = proto_msg.encode_to_vec(); - let bytes = glib::Bytes::from_owned(data); - - if let Err(e) = data_channel_clone.send_data_full(Some(&bytes)) { - tracing::warn!("Failed to send controller attach data: {}", e); - } - } - }); - } - - data_channel.connect_on_message_data(move |_data_channel, data| { - if let Some(data) = data { - let _ = tx.send(data.to_vec()); - } - }); -} - -fn handle_input_message(payload: Payload) -> Option { - match payload { - Payload::MouseMove(data) => { - let structure = gstreamer::Structure::builder("MouseMoveRelative") - .field("pointer_x", data.x as f64) - .field("pointer_y", data.y as f64) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - Payload::MouseMoveAbs(data) => { - let structure = gstreamer::Structure::builder("MouseMoveAbsolute") - .field("pointer_x", data.x as f64) - .field("pointer_y", data.y as f64) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - Payload::KeyDown(data) => { - let structure = gstreamer::Structure::builder("KeyboardKey") - .field("key", data.key as u32) - .field("pressed", true) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - Payload::KeyUp(data) => { - let structure = gstreamer::Structure::builder("KeyboardKey") - .field("key", data.key as u32) - .field("pressed", false) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - Payload::MouseWheel(data) => { - let structure = gstreamer::Structure::builder("MouseAxis") - .field("x", data.x as f64) - .field("y", data.y as f64) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - Payload::MouseKeyDown(data) => { - let structure = gstreamer::Structure::builder("MouseButton") - .field("button", data.key as u32) - .field("pressed", true) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - Payload::MouseKeyUp(data) => { - let structure = gstreamer::Structure::builder("MouseButton") - .field("button", data.key as u32) - .field("pressed", false) - .build(); - - Some(gstreamer::event::CustomUpstream::new(structure)) - } - _ => None, - } -} diff --git a/packages/server/src/nestrisink/mod.rs b/packages/server/src/nestrisink/mod.rs deleted file mode 100644 index a37b03d1..00000000 --- a/packages/server/src/nestrisink/mod.rs +++ /dev/null @@ -1,44 +0,0 @@ -use crate::input::controller::ControllerManager; -use crate::p2p::p2p::NestriConnection; -use gstreamer::glib; -use gstreamer::subclass::prelude::*; -use gstrswebrtc::signaller::Signallable; -use std::sync::Arc; -use tokio::sync::mpsc; - -mod imp; - -glib::wrapper! { - pub struct NestriSignaller(ObjectSubclass) @implements Signallable; -} - -impl NestriSignaller { - pub async fn new( - room: String, - nestri_conn: NestriConnection, - wayland_src: Arc, - controller_manager: Option>, - rumble_rx: Option>, - attach_rx: Option>, - ) -> Result> { - let obj: Self = glib::Object::new(); - obj.imp().set_stream_room(room); - obj.imp().set_nestri_connection(nestri_conn).await?; - obj.imp().set_wayland_src(wayland_src); - if let Some(controller_manager) = controller_manager { - obj.imp().set_controller_manager(controller_manager); - } - if let Some(rumble_rx) = rumble_rx { - obj.imp().set_rumble_rx(rumble_rx).await; - } - if let Some(attach_rx) = attach_rx { - obj.imp().set_attach_rx(attach_rx).await; - } - Ok(obj) - } -} -impl Default for NestriSignaller { - fn default() -> Self { - panic!("Cannot create NestriSignaller without NestriConnection and WaylandSrc"); - } -} diff --git a/packages/server/src/p2p.rs b/packages/server/src/p2p.rs deleted file mode 100644 index 5d73a2ee..00000000 --- a/packages/server/src/p2p.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod p2p; -pub mod p2p_protocol_stream; -pub mod p2p_safestream; diff --git a/packages/server/src/p2p/p2p.rs b/packages/server/src/p2p/p2p.rs deleted file mode 100644 index 401f7dc5..00000000 --- a/packages/server/src/p2p/p2p.rs +++ /dev/null @@ -1,188 +0,0 @@ -use anyhow::Result; -use libp2p::futures::StreamExt; -use libp2p::multiaddr::Protocol; -use libp2p::{ - Multiaddr, PeerId, Swarm, identity, - swarm::{NetworkBehaviour, SwarmEvent}, -}; -use libp2p_autonat as autonat; -use libp2p_identify as identify; -use libp2p_noise as noise; -use libp2p_ping as ping; -use libp2p_stream as stream; -use libp2p_tcp as tcp; -use libp2p_yamux as yamux; -use std::sync::Arc; -use tokio::sync::Mutex; - -#[derive(Clone)] -pub struct NestriConnection { - pub peer_id: PeerId, - pub control: stream::Control, -} - -#[derive(NetworkBehaviour)] -struct NestriBehaviour { - identify: identify::Behaviour, - ping: ping::Behaviour, - stream: stream::Behaviour, - autonatv2: autonat::v2::client::Behaviour, -} -impl NestriBehaviour { - fn new(key: identity::PublicKey) -> Self { - Self { - identify: identify::Behaviour::new(identify::Config::new( - "/ipfs/id/1.0.0".to_string(), - key, - )), - ping: ping::Behaviour::default(), - stream: stream::Behaviour::default(), - autonatv2: autonat::v2::client::Behaviour::default(), - } - } -} - -pub struct NestriP2P { - swarm: Arc>>, -} -impl NestriP2P { - pub async fn new() -> Result { - let swarm = Arc::new(Mutex::new( - libp2p::SwarmBuilder::with_new_identity() - .with_tokio() - .with_tcp( - tcp::Config::default(), - noise::Config::new, - yamux::Config::default, - )? - .with_quic() - .with_dns()? - .with_behaviour(|key| NestriBehaviour::new(key.public()))? - .build(), - )); - - // Spawn the swarm event loop - let swarm_clone = swarm.clone(); - tokio::spawn(swarm_loop(swarm_clone)); - - Ok(NestriP2P { swarm }) - } - - pub async fn connect(&self, conn_url: &str) -> Result { - let conn_addr: Multiaddr = conn_url.parse()?; - - let mut swarm_lock = self.swarm.lock().await; - swarm_lock.dial(conn_addr.clone())?; - - let Some(Protocol::P2p(peer_id)) = conn_addr.clone().iter().last() else { - return Err(anyhow::Error::msg( - "Invalid multiaddr: missing /p2p/", - )); - }; - - Ok(NestriConnection { - peer_id, - control: swarm_lock.behaviour().stream.new_control(), - }) - } -} - -async fn swarm_loop(swarm: Arc>>) { - loop { - let event = swarm.lock().await.select_next_some().await; - match event { - /* Ping Events */ - SwarmEvent::Behaviour(NestriBehaviourEvent::Ping(ping::Event { - peer, - connection, - result, - })) => { - if let Ok(latency) = result { - tracing::debug!( - "Ping event - peer: {}, connection: {:?}, latency: {} us", - peer, - connection, - latency.as_micros() - ); - } else if let Err(err) = result { - tracing::warn!( - "Ping event - peer: {}, connection: {:?}, error: {:?}", - peer, - connection, - err - ); - } - } - /* Autonat (v2) Events */ - SwarmEvent::Behaviour(NestriBehaviourEvent::Autonatv2( - autonat::v2::client::Event { - server, - tested_addr, - bytes_sent, - result, - }, - )) => { - if let Ok(()) = result { - tracing::debug!( - "AutonatV2 event - test server '{}' verified address '{}' with {} bytes sent", - server, - tested_addr, - bytes_sent - ); - } else if let Err(err) = result { - tracing::warn!( - "AutonatV2 event - test server '{}' failed to verify address '{}' with {} bytes sent: {:?}", - server, - tested_addr, - bytes_sent, - err - ); - } - } - /* Swarm Events */ - SwarmEvent::NewListenAddr { address, .. } => { - tracing::info!("Listening on: '{}'", address); - } - SwarmEvent::ConnectionEstablished { peer_id, .. } => { - tracing::info!("Connection established with peer: {}", peer_id); - } - SwarmEvent::ConnectionClosed { peer_id, cause, .. } => { - if let Some(err) = cause { - tracing::error!( - "Connection with peer {} closed due to error: {}", - peer_id, - err - ); - } else { - tracing::info!("Connection with peer {} closed", peer_id); - } - } - SwarmEvent::IncomingConnection { - local_addr, - send_back_addr, - .. - } => { - tracing::info!( - "Incoming connection from: {} (send back to: {})", - local_addr, - send_back_addr - ); - } - SwarmEvent::OutgoingConnectionError { peer_id, error, .. } => { - if let Some(peer_id) = peer_id { - tracing::error!("Failed to connect to peer {}: {}", peer_id, error); - } else { - tracing::error!("Failed to connect: {}", error); - } - } - SwarmEvent::ExternalAddrConfirmed { address } => { - tracing::info!("Confirmed external address: {}", address); - } - /* Unhandled Events */ - SwarmEvent::Behaviour(event) => { - tracing::warn!("Unhandled Behaviour event: {:?}", event); - } - _ => {} - } - } -} diff --git a/packages/server/src/p2p/p2p_protocol_stream.rs b/packages/server/src/p2p/p2p_protocol_stream.rs deleted file mode 100644 index 0f016925..00000000 --- a/packages/server/src/p2p/p2p_protocol_stream.rs +++ /dev/null @@ -1,186 +0,0 @@ -use crate::p2p::p2p::NestriConnection; -use crate::p2p::p2p_safestream::SafeStream; -use anyhow::Result; -use dashmap::DashMap; -use libp2p::StreamProtocol; -use prost::Message; -use std::sync::Arc; -use tokio::sync::mpsc; - -// Cloneable callback type -pub type CallbackInner = dyn Fn(crate::proto::proto::ProtoMessage) -> Result<()> + Send + Sync + 'static; -pub struct Callback(Arc); -impl Callback { - pub fn new(f: F) -> Self - where - F: Fn(crate::proto::proto::ProtoMessage) -> Result<()> + Send + Sync + 'static, - { - Callback(Arc::new(f)) - } - - pub fn call(&self, data: crate::proto::proto::ProtoMessage) -> Result<()> { - self.0(data) - } -} -impl Clone for Callback { - fn clone(&self) -> Self { - Callback(Arc::clone(&self.0)) - } -} -impl From> for Callback { - fn from(boxed: Box) -> Self { - Callback(Arc::from(boxed)) - } -} - -/// NestriStreamProtocol manages the stream protocol for Nestri connections. -pub struct NestriStreamProtocol { - tx: Option>>, - safe_stream: Arc, - callbacks: Arc>, - read_handle: Option>, - write_handle: Option>, -} -impl NestriStreamProtocol { - const NESTRI_PROTOCOL_STREAM_PUSH: StreamProtocol = - StreamProtocol::new("/nestri-relay/stream-push/1.0.0"); - - pub async fn new(nestri_connection: NestriConnection) -> Result { - let mut nestri_connection = nestri_connection.clone(); - let push_stream = match nestri_connection - .control - .open_stream(nestri_connection.peer_id, Self::NESTRI_PROTOCOL_STREAM_PUSH) - .await - { - Ok(stream) => stream, - Err(e) => { - return Err(anyhow::Error::msg(format!( - "Failed to open push stream: {}", - e - ))); - } - }; - - let mut sp = NestriStreamProtocol { - tx: None, - safe_stream: Arc::new(SafeStream::new(push_stream)), - callbacks: Arc::new(DashMap::new()), - read_handle: None, - write_handle: None, - }; - - // Use restart method to initialize the read and write loops - sp.restart()?; - - Ok(sp) - } - - pub fn restart(&mut self) -> Result<()> { - // Return if tx and handles are already initialized - if self.tx.is_some() && self.read_handle.is_some() && self.write_handle.is_some() { - tracing::warn!("NestriStreamProtocol is already running, restart skipped"); - return Ok(()); - } - - let (tx, rx) = mpsc::channel(1000); - self.tx = Some(tx); - self.read_handle = Some(self.spawn_read_loop()); - self.write_handle = Some(self.spawn_write_loop(rx)); - - Ok(()) - } - - fn spawn_read_loop(&self) -> tokio::task::JoinHandle<()> { - let safe_stream = self.safe_stream.clone(); - let callbacks = self.callbacks.clone(); - tokio::spawn(async move { - loop { - let data = { - match safe_stream.receive_raw().await { - Ok(data) => data, - Err(e) => { - tracing::error!("Error receiving data: {}", e); - break; // Exit the loop on error - } - } - }; - - match crate::proto::proto::ProtoMessage::decode(data.as_slice()) { - Ok(message) => { - if let Some(base_message) = &message.message_base { - let response_type = &base_message.payload_type; - let response_type = response_type.clone(); - - // With DashMap, we don't need explicit locking - // we just get the callback directly if it exists - if let Some(callback) = callbacks.get(&response_type) { - // Execute the callback - if let Err(e) = callback.call(message) { - tracing::error!( - "Callback for response type '{}' errored: {:?}", - response_type, - e - ); - } - } else { - tracing::warn!( - "No callback registered for response type: {}", - response_type - ); - } - } else { - tracing::error!("No base message in decoded protobuf message",); - } - } - Err(e) => { - tracing::error!("Failed to decode message: {}", e); - } - } - } - }) - } - - fn spawn_write_loop(&self, mut rx: mpsc::Receiver>) -> tokio::task::JoinHandle<()> { - let safe_stream = self.safe_stream.clone(); - tokio::spawn(async move { - loop { - // Wait for a message from the channel - match rx.recv().await { - Some(tx_data) => { - if let Err(e) = safe_stream.send_raw(&tx_data).await { - tracing::error!("Error sending data: {:?}", e); - } - } - None => { - tracing::info!("Receiver closed, exiting write loop"); - break; - } - } - } - }) - } - - pub fn send_message(&self, message: &crate::proto::proto::ProtoMessage) -> Result<()> { - let mut buf = Vec::new(); - message.encode(&mut buf)?; - let Some(tx) = &self.tx else { - return Err(anyhow::Error::msg( - if self.read_handle.is_none() && self.write_handle.is_none() { - "NestriStreamProtocol has been shutdown" - } else { - "NestriStreamProtocol is not properly initialized" - }, - )); - }; - tx.try_send(buf)?; - Ok(()) - } - - pub fn register_callback(&self, response_type: &str, callback: F) - where - F: Fn(crate::proto::proto::ProtoMessage) -> Result<()> + Send + Sync + 'static, - { - self.callbacks - .insert(response_type.to_string(), Callback::new(callback)); - } -} diff --git a/packages/server/src/p2p/p2p_safestream.rs b/packages/server/src/p2p/p2p_safestream.rs deleted file mode 100644 index 198aa50b..00000000 --- a/packages/server/src/p2p/p2p_safestream.rs +++ /dev/null @@ -1,78 +0,0 @@ -use anyhow::Result; -use libp2p::futures::io::{ReadHalf, WriteHalf}; -use libp2p::futures::{AsyncReadExt, AsyncWriteExt}; -use std::sync::Arc; -use tokio::sync::Mutex; -use unsigned_varint::{decode, encode}; - -pub struct SafeStream { - stream_read: Arc>>, - stream_write: Arc>>, -} -impl SafeStream { - pub fn new(stream: libp2p::Stream) -> Self { - let (read, write) = stream.split(); - SafeStream { - stream_read: Arc::new(Mutex::new(read)), - stream_write: Arc::new(Mutex::new(write)), - } - } - - pub async fn send_raw(&self, data: &[u8]) -> Result<()> { - self.send_with_length_prefix(data).await - } - - pub async fn receive_raw(&self) -> Result> { - self.receive_with_length_prefix().await - } - - async fn send_with_length_prefix(&self, data: &[u8]) -> Result<()> { - let mut stream_write = self.stream_write.lock().await; - - // Encode length as varint - let mut length_buf = encode::usize_buffer(); - let length_bytes = encode::usize(data.len(), &mut length_buf); - - // Write varint length prefix - stream_write.write_all(length_bytes).await?; - - // Write payload - stream_write.write_all(data).await?; - stream_write.flush().await?; - - Ok(()) - } - - async fn receive_with_length_prefix(&self) -> Result> { - let mut stream_read = self.stream_read.lock().await; - - // Read varint length prefix (up to 10 bytes for u64) - let mut length_buf = Vec::new(); - let mut temp_byte = [0u8; 1]; - - loop { - stream_read.read_exact(&mut temp_byte).await?; - length_buf.push(temp_byte[0]); - - // Check if this is the last byte (MSB = 0) - if temp_byte[0] & 0x80 == 0 { - break; - } - - // Protect against malicious infinite varints - if length_buf.len() > 10 { - anyhow::bail!("Invalid varint encoding"); - } - } - - // Decode the varint - let (length, _) = decode::usize(&length_buf) - .map_err(|e| anyhow::anyhow!("Failed to decode varint: {}", e))?; - - // Read payload - let mut buffer = vec![0u8; length]; - stream_read.read_exact(&mut buffer).await?; - - Ok(buffer) - } -} diff --git a/packages/server/src/proto.rs b/packages/server/src/proto.rs deleted file mode 100644 index 57b0205c..00000000 --- a/packages/server/src/proto.rs +++ /dev/null @@ -1,35 +0,0 @@ -pub mod proto; - -pub struct CreateMessageOptions { - pub sequence_id: Option, - pub latency: Option, -} - -pub fn create_message( - payload: proto::proto_message::Payload, - payload_type: impl Into, - options: Option, -) -> proto::ProtoMessage { - let opts = options.unwrap_or(CreateMessageOptions { - sequence_id: None, - latency: None, - }); - - let latency = opts.latency.or_else(|| { - opts.sequence_id.map(|seq_id| proto::ProtoLatencyTracker { - sequence_id: seq_id, - timestamps: vec![proto::ProtoTimestampEntry { - stage: "created".to_string(), - time: Some(prost_types::Timestamp::from(std::time::SystemTime::now())), - }], - }) - }); - - proto::ProtoMessage { - message_base: Some(proto::ProtoMessageBase { - payload_type: payload_type.into(), - latency, - }), - payload: Some(payload), - } -} diff --git a/packages/server/src/proto/proto.rs b/packages/server/src/proto/proto.rs deleted file mode 100644 index b9eb8965..00000000 --- a/packages/server/src/proto/proto.rs +++ /dev/null @@ -1,315 +0,0 @@ -// @generated -// This file is @generated by prost-build. -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoTimestampEntry { - #[prost(string, tag="1")] - pub stage: ::prost::alloc::string::String, - #[prost(message, optional, tag="2")] - pub time: ::core::option::Option<::prost_types::Timestamp>, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ProtoLatencyTracker { - #[prost(string, tag="1")] - pub sequence_id: ::prost::alloc::string::String, - #[prost(message, repeated, tag="2")] - pub timestamps: ::prost::alloc::vec::Vec, -} -// Mouse messages - -/// MouseMove message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoMouseMove { - #[prost(int32, tag="1")] - pub x: i32, - #[prost(int32, tag="2")] - pub y: i32, -} -/// MouseMoveAbs message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoMouseMoveAbs { - #[prost(int32, tag="1")] - pub x: i32, - #[prost(int32, tag="2")] - pub y: i32, -} -/// MouseWheel message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoMouseWheel { - #[prost(int32, tag="1")] - pub x: i32, - #[prost(int32, tag="2")] - pub y: i32, -} -/// MouseKeyDown message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoMouseKeyDown { - #[prost(int32, tag="1")] - pub key: i32, -} -/// MouseKeyUp message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoMouseKeyUp { - #[prost(int32, tag="1")] - pub key: i32, -} -// Keyboard messages - -/// KeyDown message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoKeyDown { - #[prost(int32, tag="1")] - pub key: i32, -} -/// KeyUp message -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoKeyUp { - #[prost(int32, tag="1")] - pub key: i32, -} -// Clipboard message -// message ProtoClipboard { -// string content = 1; // Clipboard content -// } - -// Controller messages - -/// ControllerAttach message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoControllerAttach { - /// One of the following enums: "ps", "xbox" or "switch" - #[prost(string, tag="1")] - pub id: ::prost::alloc::string::String, - /// Session specific slot number (0-3) - #[prost(int32, tag="2")] - pub session_slot: i32, - /// Session ID of the client - #[prost(string, tag="3")] - pub session_id: ::prost::alloc::string::String, -} -/// ControllerDetach message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoControllerDetach { - /// Session specific slot number (0-3) - #[prost(int32, tag="1")] - pub session_slot: i32, - /// Session ID of the client - #[prost(string, tag="2")] - pub session_id: ::prost::alloc::string::String, -} -/// ControllerRumble message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoControllerRumble { - /// Session specific slot number (0-3) - #[prost(int32, tag="1")] - pub session_slot: i32, - /// Session ID of the client - #[prost(string, tag="2")] - pub session_id: ::prost::alloc::string::String, - /// Low frequency rumble (0-65535) - #[prost(int32, tag="3")] - pub low_frequency: i32, - /// High frequency rumble (0-65535) - #[prost(int32, tag="4")] - pub high_frequency: i32, - /// Duration in milliseconds - #[prost(int32, tag="5")] - pub duration: i32, -} -/// ControllerStateBatch - single message containing full or partial controller state -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ProtoControllerStateBatch { - /// Session specific slot number (0-3) - #[prost(int32, tag="1")] - pub session_slot: i32, - /// Session ID of the client - #[prost(string, tag="2")] - pub session_id: ::prost::alloc::string::String, - #[prost(enumeration="proto_controller_state_batch::UpdateType", tag="3")] - pub update_type: i32, - /// Sequence number for packet loss detection - #[prost(uint32, tag="4")] - pub sequence: u32, - /// Button state map (Linux event codes) - #[prost(map="int32, bool", tag="5")] - pub button_changed_mask: ::std::collections::HashMap, - /// Analog inputs - /// - /// -32768 to 32767 - #[prost(int32, optional, tag="6")] - pub left_stick_x: ::core::option::Option, - /// -32768 to 32767 - #[prost(int32, optional, tag="7")] - pub left_stick_y: ::core::option::Option, - /// -32768 to 32767 - #[prost(int32, optional, tag="8")] - pub right_stick_x: ::core::option::Option, - /// -32768 to 32767 - #[prost(int32, optional, tag="9")] - pub right_stick_y: ::core::option::Option, - /// -32768 to 32767 - #[prost(int32, optional, tag="10")] - pub left_trigger: ::core::option::Option, - /// -32768 to 32767 - #[prost(int32, optional, tag="11")] - pub right_trigger: ::core::option::Option, - /// -1, 0, or 1 - #[prost(int32, optional, tag="12")] - pub dpad_x: ::core::option::Option, - /// -1, 0, or 1 - #[prost(int32, optional, tag="13")] - pub dpad_y: ::core::option::Option, - /// Bitmask indicating which fields have changed - /// Bit 0: button_changed_mask, Bit 1: left_stick_x, Bit 2: left_stick_y, etc. - #[prost(uint32, optional, tag="14")] - pub changed_fields: ::core::option::Option, -} -/// Nested message and enum types in `ProtoControllerStateBatch`. -pub mod proto_controller_state_batch { - #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] - #[repr(i32)] - pub enum UpdateType { - /// Complete controller state - FullState = 0, - /// Only changed fields - Delta = 1, - } - impl UpdateType { - /// String value of the enum field names used in the ProtoBuf definition. - /// - /// The values are not transformed in any way and thus are considered stable - /// (if the ProtoBuf definition does not change) and safe for programmatic use. - pub fn as_str_name(&self) -> &'static str { - match self { - Self::FullState => "FULL_STATE", - Self::Delta => "DELTA", - } - } - /// Creates an enum from field names used in the ProtoBuf definition. - pub fn from_str_name(value: &str) -> ::core::option::Option { - match value { - "FULL_STATE" => Some(Self::FullState), - "DELTA" => Some(Self::Delta), - _ => None, - } - } - } -} -// WebRTC + signaling - -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct RtcIceCandidateInit { - #[prost(string, tag="1")] - pub candidate: ::prost::alloc::string::String, - #[prost(uint32, optional, tag="2")] - pub sdp_m_line_index: ::core::option::Option, - #[prost(string, optional, tag="3")] - pub sdp_mid: ::core::option::Option<::prost::alloc::string::String>, - #[prost(string, optional, tag="4")] - pub username_fragment: ::core::option::Option<::prost::alloc::string::String>, -} -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct RtcSessionDescriptionInit { - #[prost(string, tag="1")] - pub sdp: ::prost::alloc::string::String, - #[prost(string, tag="2")] - pub r#type: ::prost::alloc::string::String, -} -/// ProtoICE message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoIce { - #[prost(message, optional, tag="1")] - pub candidate: ::core::option::Option, -} -/// ProtoSDP message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoSdp { - #[prost(message, optional, tag="1")] - pub sdp: ::core::option::Option, -} -/// ProtoRaw message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoRaw { - #[prost(string, tag="1")] - pub data: ::prost::alloc::string::String, -} -/// ProtoClientRequestRoomStream message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoClientRequestRoomStream { - #[prost(string, tag="1")] - pub room_name: ::prost::alloc::string::String, - #[prost(string, tag="2")] - pub session_id: ::prost::alloc::string::String, -} -/// ProtoClientDisconnected message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoClientDisconnected { - #[prost(string, tag="1")] - pub session_id: ::prost::alloc::string::String, - #[prost(int32, repeated, tag="2")] - pub controller_slots: ::prost::alloc::vec::Vec, -} -/// ProtoServerPushStream message -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct ProtoServerPushStream { - #[prost(string, tag="1")] - pub room_name: ::prost::alloc::string::String, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ProtoMessageBase { - #[prost(string, tag="1")] - pub payload_type: ::prost::alloc::string::String, - #[prost(message, optional, tag="2")] - pub latency: ::core::option::Option, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ProtoMessage { - #[prost(message, optional, tag="1")] - pub message_base: ::core::option::Option, - #[prost(oneof="proto_message::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20, 21, 22, 23, 24, 25")] - pub payload: ::core::option::Option, -} -/// Nested message and enum types in `ProtoMessage`. -pub mod proto_message { - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Payload { - /// Input types - #[prost(message, tag="2")] - MouseMove(super::ProtoMouseMove), - #[prost(message, tag="3")] - MouseMoveAbs(super::ProtoMouseMoveAbs), - #[prost(message, tag="4")] - MouseWheel(super::ProtoMouseWheel), - #[prost(message, tag="5")] - MouseKeyDown(super::ProtoMouseKeyDown), - #[prost(message, tag="6")] - MouseKeyUp(super::ProtoMouseKeyUp), - #[prost(message, tag="7")] - KeyDown(super::ProtoKeyDown), - /// ProtoClipboard clipboard = 9; - #[prost(message, tag="8")] - KeyUp(super::ProtoKeyUp), - /// Controller input types - #[prost(message, tag="9")] - ControllerAttach(super::ProtoControllerAttach), - #[prost(message, tag="10")] - ControllerDetach(super::ProtoControllerDetach), - #[prost(message, tag="11")] - ControllerRumble(super::ProtoControllerRumble), - #[prost(message, tag="12")] - ControllerStateBatch(super::ProtoControllerStateBatch), - /// Signaling types - #[prost(message, tag="20")] - Ice(super::ProtoIce), - #[prost(message, tag="21")] - Sdp(super::ProtoSdp), - #[prost(message, tag="22")] - Raw(super::ProtoRaw), - #[prost(message, tag="23")] - ClientRequestRoomStream(super::ProtoClientRequestRoomStream), - #[prost(message, tag="24")] - ClientDisconnected(super::ProtoClientDisconnected), - #[prost(message, tag="25")] - ServerPushStream(super::ProtoServerPushStream), - } -} -// @@protoc_insertion_point(module) diff --git a/packages/ui/.gitkeep b/packages/ui/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/web/.astro/content-assets.mjs b/packages/web/.astro/content-assets.mjs deleted file mode 100644 index 2b8b8234..00000000 --- a/packages/web/.astro/content-assets.mjs +++ /dev/null @@ -1 +0,0 @@ -export default new Map(); \ No newline at end of file diff --git a/packages/web/.astro/content-modules.mjs b/packages/web/.astro/content-modules.mjs deleted file mode 100644 index 2b8b8234..00000000 --- a/packages/web/.astro/content-modules.mjs +++ /dev/null @@ -1 +0,0 @@ -export default new Map(); \ No newline at end of file diff --git a/packages/web/.astro/data-store.json b/packages/web/.astro/data-store.json deleted file mode 100644 index c42784d5..00000000 --- a/packages/web/.astro/data-store.json +++ /dev/null @@ -1 +0,0 @@ -[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.11.2","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}"] \ No newline at end of file diff --git a/packages/web/.astro/settings.json b/packages/web/.astro/settings.json deleted file mode 100644 index 8fa98c8f..00000000 --- a/packages/web/.astro/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "_variables": { - "lastUpdateCheck": 1752741260450 - } -} \ No newline at end of file diff --git a/packages/web/.astro/types.d.ts b/packages/web/.astro/types.d.ts deleted file mode 100644 index f964fe0c..00000000 --- a/packages/web/.astro/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/packages/web/public/logo.black.svg b/packages/web/public/logo.black.svg deleted file mode 100644 index 36cf3fb9..00000000 --- a/packages/web/public/logo.black.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - diff --git a/packages/web/public/logo.white.svg b/packages/web/public/logo.white.svg deleted file mode 100644 index 3de4a9e6..00000000 --- a/packages/web/public/logo.white.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - diff --git a/packages/www/.gitignore b/packages/www/.gitignore deleted file mode 100644 index 9b1ee42e..00000000 --- a/packages/www/.gitignore +++ /dev/null @@ -1,175 +0,0 @@ -# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore - -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Caches - -.cache - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) - -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/packages/www/README.md b/packages/www/README.md deleted file mode 100644 index c1267dca..00000000 --- a/packages/www/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# @console/www - -To install dependencies: - -```bash -bun install -``` - -To run: - -```bash -bun run index.ts -``` - -This project was created using `bun init` in bun v1.1.34. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/www/index.html b/packages/www/index.html deleted file mode 100644 index 2d3a1234..00000000 --- a/packages/www/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - Nestri - Your games. Your rules. - - - -
- - - diff --git a/packages/www/package.json b/packages/www/package.json deleted file mode 100644 index 1a3e9db9..00000000 --- a/packages/www/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@nestri/www", - "type": "module", - "private": true, - "scripts": { - "start": "vite", - "dev": "vite", - "build": "vite build", - "serve": "vite preview", - "typecheck": "tsc --noEmit --incremental" - }, - "devDependencies": { - "@macaron-css/vite": "1.5.1", - "@types/bun": "latest", - "@types/qrcode": "^1.5.5", - "vite": "6.1.6", - "vite-plugin-solid": "^2.11.2" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "dependencies": { - "@fontsource-variable/geist-mono": "^5.0.1", - "@fontsource-variable/mona-sans": "^5.0.1", - "@fontsource/geist-sans": "^5.1.0", - "@macaron-css/core": "1.5.1", - "@macaron-css/solid": "1.5.3", - "@modular-forms/solid": "^0.25.1", - "@nestri/core": "*", - "@nestri/functions": "*", - "@nestri/zero": "*", - "@openauthjs/openauth": "*", - "@openauthjs/solid": "0.0.0-20250311201457", - "@rocicorp/zero": "0.20.2025051800", - "@solid-primitives/event-listener": "^2.4.0", - "@solid-primitives/storage": "^4.3.1", - "@solidjs/router": "^0.15.3", - "body-scroll-lock-upgrade": "^1.1.0", - "eventsource": "^3.0.5", - "fast-average-color": "9.5.0", - "focus-trap": "^7.6.4", - "hono": "^4.7.4", - "modern-normalize": "^3.0.1", - "motion": "^12.6.2", - "qrcode": "^1.5.4", - "solid-js": "^1.9.5", - "valibot": "^1.0.0-rc.3", - "zod": "^3.24.2" - } -} \ No newline at end of file diff --git a/packages/www/src/App.tsx b/packages/www/src/App.tsx deleted file mode 100644 index 3da3d4e7..00000000 --- a/packages/www/src/App.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import '@fontsource-variable/mona-sans'; -import '@fontsource-variable/geist-mono'; -import '@fontsource/geist-sans/400.css'; -import '@fontsource/geist-sans/500.css'; -import '@fontsource/geist-sans/600.css'; -import '@fontsource/geist-sans/700.css'; -import '@fontsource/geist-sans/800.css'; -import '@fontsource/geist-sans/900.css'; -import { Text } from '@nestri/www/ui/text'; -import { styled } from "@macaron-css/solid"; -import { ZeroProvider } from './providers/zero'; -import { ProfilesRoute } from './pages/profiles'; -import { NewProfile } from '@nestri/www/pages/new'; -import { SteamRoute } from '@nestri/www/pages/steam'; -import { OpenAuthProvider } from "@openauthjs/solid"; -import { NotFound } from '@nestri/www/pages/not-found'; -import { Navigate, Route, Router } from "@solidjs/router"; -import { globalStyle, macaron$ } from "@macaron-css/core"; -import { useStorage } from '@nestri/www/providers/account'; -import { Screen as FullScreen } from '@nestri/www/ui/layout'; -import { darkClass, lightClass, theme } from '@nestri/www/ui/theme'; -import { AccountProvider, useAccount } from '@nestri/www/providers/account'; -import { Component, createSignal, Match, onCleanup, Switch } from 'solid-js'; - -const Root = styled("div", { - base: { - inset: 0, - lineHeight: 1, - fontSynthesis: "none", - color: theme.color.d1000.gray, - fontFamily: theme.font.family.body, - textRendering: "optimizeLegibility", - WebkitFontSmoothing: "antialised", - backgroundColor: theme.color.background.d100, - }, -}); - -globalStyle("html", { - fontSize: 16, - fontWeight: 400, - // Hardcode colors - "@media": { - "(prefers-color-scheme: light)": { - backgroundColor: "#f4f5f6", - }, - "(prefers-color-scheme: dark)": { - backgroundColor: "rgb(19,21,23)", - }, - }, -}); - -globalStyle("dialog:modal", { - maxHeight: "unset", - maxWidth: "unset" -}) - -globalStyle("h1, h2, h3, h4, h5, h6, p", { - margin: 0, -}); - -macaron$(() => - ["::placeholder", ":-ms-input-placeholder"].forEach((selector) => - globalStyle(selector, { - opacity: 1, - color: theme.color.d1000.gray, - }), - ), -); - -globalStyle("body", { - cursor: "default", -}); - -globalStyle("*", { - boxSizing: "border-box", -}); - -export const App: Component = () => { - const [theme, setTheme] = createSignal( - window.matchMedia("(prefers-color-scheme: dark)").matches - ? "dark" - : "light", - ); - - const darkMode = window.matchMedia("(prefers-color-scheme: dark)"); - const setColorScheme = (e: MediaQueryListEvent) => { - setTheme(e.matches ? "dark" : "light"); - }; - darkMode.addEventListener("change", setColorScheme); - onCleanup(() => { - darkMode.removeEventListener("change", setColorScheme); - }); - - const storage = useStorage(); - - return ( - - - - ( - - Confirming your identity… - - }> - - {/* props.children */} - {props.children} - - - )} - > - {SteamRoute} - - - { - const account = useAccount(); - return ( - - 0}> - w.id === storage.value.steam, - ) || account.current.profiles[0] - ).id}`} - /> - - - - - - ); - }} - /> - } /> - - - - - ) -} \ No newline at end of file diff --git a/packages/www/src/assets/fonts/Geist.ttf b/packages/www/src/assets/fonts/Geist.ttf deleted file mode 100644 index 40d1d131..00000000 Binary files a/packages/www/src/assets/fonts/Geist.ttf and /dev/null differ diff --git a/packages/www/src/assets/fonts/GeistMono.ttf b/packages/www/src/assets/fonts/GeistMono.ttf deleted file mode 100644 index 5ea4e68f..00000000 Binary files a/packages/www/src/assets/fonts/GeistMono.ttf and /dev/null differ diff --git a/packages/www/src/assets/fonts/MonaSansVF-Regular.ttf b/packages/www/src/assets/fonts/MonaSansVF-Regular.ttf deleted file mode 100644 index 61db3f38..00000000 Binary files a/packages/www/src/assets/fonts/MonaSansVF-Regular.ttf and /dev/null differ diff --git a/packages/www/src/assets/fonts/MonaSansVF-Regular.woff b/packages/www/src/assets/fonts/MonaSansVF-Regular.woff deleted file mode 100644 index cc55c67b..00000000 Binary files a/packages/www/src/assets/fonts/MonaSansVF-Regular.woff and /dev/null differ diff --git a/packages/www/src/assets/fonts/MonaSansVF-Regular.woff2 b/packages/www/src/assets/fonts/MonaSansVF-Regular.woff2 deleted file mode 100644 index 9b73cd28..00000000 Binary files a/packages/www/src/assets/fonts/MonaSansVF-Regular.woff2 and /dev/null differ diff --git a/packages/www/src/assets/games/1.png b/packages/www/src/assets/games/1.png deleted file mode 100644 index 32d9306a..00000000 Binary files a/packages/www/src/assets/games/1.png and /dev/null differ diff --git a/packages/www/src/assets/games/10.png b/packages/www/src/assets/games/10.png deleted file mode 100644 index e857a886..00000000 Binary files a/packages/www/src/assets/games/10.png and /dev/null differ diff --git a/packages/www/src/assets/games/11.png b/packages/www/src/assets/games/11.png deleted file mode 100644 index bad7260d..00000000 Binary files a/packages/www/src/assets/games/11.png and /dev/null differ diff --git a/packages/www/src/assets/games/12.png b/packages/www/src/assets/games/12.png deleted file mode 100644 index cdec8565..00000000 Binary files a/packages/www/src/assets/games/12.png and /dev/null differ diff --git a/packages/www/src/assets/games/13.png b/packages/www/src/assets/games/13.png deleted file mode 100644 index d37902ff..00000000 Binary files a/packages/www/src/assets/games/13.png and /dev/null differ diff --git a/packages/www/src/assets/games/14.png b/packages/www/src/assets/games/14.png deleted file mode 100644 index 395ca147..00000000 Binary files a/packages/www/src/assets/games/14.png and /dev/null differ diff --git a/packages/www/src/assets/games/15.png b/packages/www/src/assets/games/15.png deleted file mode 100644 index cbd185b7..00000000 Binary files a/packages/www/src/assets/games/15.png and /dev/null differ diff --git a/packages/www/src/assets/games/16.png b/packages/www/src/assets/games/16.png deleted file mode 100644 index cf318cd1..00000000 Binary files a/packages/www/src/assets/games/16.png and /dev/null differ diff --git a/packages/www/src/assets/games/17.png b/packages/www/src/assets/games/17.png deleted file mode 100644 index b62b415e..00000000 Binary files a/packages/www/src/assets/games/17.png and /dev/null differ diff --git a/packages/www/src/assets/games/18.png b/packages/www/src/assets/games/18.png deleted file mode 100644 index d2352d99..00000000 Binary files a/packages/www/src/assets/games/18.png and /dev/null differ diff --git a/packages/www/src/assets/games/19.png b/packages/www/src/assets/games/19.png deleted file mode 100644 index 7e840c46..00000000 Binary files a/packages/www/src/assets/games/19.png and /dev/null differ diff --git a/packages/www/src/assets/games/2.png b/packages/www/src/assets/games/2.png deleted file mode 100644 index 8fbdff7a..00000000 Binary files a/packages/www/src/assets/games/2.png and /dev/null differ diff --git a/packages/www/src/assets/games/20.png b/packages/www/src/assets/games/20.png deleted file mode 100644 index 943895e5..00000000 Binary files a/packages/www/src/assets/games/20.png and /dev/null differ diff --git a/packages/www/src/assets/games/21.png b/packages/www/src/assets/games/21.png deleted file mode 100644 index 631095cb..00000000 Binary files a/packages/www/src/assets/games/21.png and /dev/null differ diff --git a/packages/www/src/assets/games/22.png b/packages/www/src/assets/games/22.png deleted file mode 100644 index 35539318..00000000 Binary files a/packages/www/src/assets/games/22.png and /dev/null differ diff --git a/packages/www/src/assets/games/23.png b/packages/www/src/assets/games/23.png deleted file mode 100644 index 7279969e..00000000 Binary files a/packages/www/src/assets/games/23.png and /dev/null differ diff --git a/packages/www/src/assets/games/24.png b/packages/www/src/assets/games/24.png deleted file mode 100644 index 0e6cf00f..00000000 Binary files a/packages/www/src/assets/games/24.png and /dev/null differ diff --git a/packages/www/src/assets/games/25.png b/packages/www/src/assets/games/25.png deleted file mode 100644 index d2d8a9f2..00000000 Binary files a/packages/www/src/assets/games/25.png and /dev/null differ diff --git a/packages/www/src/assets/games/26.png b/packages/www/src/assets/games/26.png deleted file mode 100644 index 9283ad54..00000000 Binary files a/packages/www/src/assets/games/26.png and /dev/null differ diff --git a/packages/www/src/assets/games/27.png b/packages/www/src/assets/games/27.png deleted file mode 100644 index 95a78373..00000000 Binary files a/packages/www/src/assets/games/27.png and /dev/null differ diff --git a/packages/www/src/assets/games/28.png b/packages/www/src/assets/games/28.png deleted file mode 100644 index 1bbfb22e..00000000 Binary files a/packages/www/src/assets/games/28.png and /dev/null differ diff --git a/packages/www/src/assets/games/29.png b/packages/www/src/assets/games/29.png deleted file mode 100644 index c42c1bf6..00000000 Binary files a/packages/www/src/assets/games/29.png and /dev/null differ diff --git a/packages/www/src/assets/games/3.png b/packages/www/src/assets/games/3.png deleted file mode 100644 index 17d9fda1..00000000 Binary files a/packages/www/src/assets/games/3.png and /dev/null differ diff --git a/packages/www/src/assets/games/30.png b/packages/www/src/assets/games/30.png deleted file mode 100644 index c2510d85..00000000 Binary files a/packages/www/src/assets/games/30.png and /dev/null differ diff --git a/packages/www/src/assets/games/4.png b/packages/www/src/assets/games/4.png deleted file mode 100644 index 73c39c97..00000000 Binary files a/packages/www/src/assets/games/4.png and /dev/null differ diff --git a/packages/www/src/assets/games/5.png b/packages/www/src/assets/games/5.png deleted file mode 100644 index 58479e8b..00000000 Binary files a/packages/www/src/assets/games/5.png and /dev/null differ diff --git a/packages/www/src/assets/games/6.png b/packages/www/src/assets/games/6.png deleted file mode 100644 index 7b0871b1..00000000 Binary files a/packages/www/src/assets/games/6.png and /dev/null differ diff --git a/packages/www/src/assets/games/7.png b/packages/www/src/assets/games/7.png deleted file mode 100644 index 6d5f5861..00000000 Binary files a/packages/www/src/assets/games/7.png and /dev/null differ diff --git a/packages/www/src/assets/games/8.png b/packages/www/src/assets/games/8.png deleted file mode 100644 index 1315bdd0..00000000 Binary files a/packages/www/src/assets/games/8.png and /dev/null differ diff --git a/packages/www/src/assets/games/9.png b/packages/www/src/assets/games/9.png deleted file mode 100644 index 70c14d76..00000000 Binary files a/packages/www/src/assets/games/9.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_button_disabled_bg.png b/packages/www/src/assets/portal/play_button_disabled_bg.png deleted file mode 100644 index 12c9c223..00000000 Binary files a/packages/www/src/assets/portal/play_button_disabled_bg.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_button_focused_bg.png b/packages/www/src/assets/portal/play_button_focused_bg.png deleted file mode 100644 index a7ab98cd..00000000 Binary files a/packages/www/src/assets/portal/play_button_focused_bg.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_button_idle.json b/packages/www/src/assets/portal/play_button_idle.json deleted file mode 100644 index a1e5cd9d..00000000 --- a/packages/www/src/assets/portal/play_button_idle.json +++ /dev/null @@ -1,2316 +0,0 @@ -{"frames": [ - -{ - "filename": "loop_190910_00000.png", - "frame": {"x":1,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00001.png", - "frame": {"x":1,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00002.png", - "frame": {"x":1,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00003.png", - "frame": {"x":1,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00004.png", - "frame": {"x":1,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00005.png", - "frame": {"x":1,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00006.png", - "frame": {"x":1,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00007.png", - "frame": {"x":1,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00008.png", - "frame": {"x":1,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00009.png", - "frame": {"x":1,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00010.png", - "frame": {"x":1,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00011.png", - "frame": {"x":1,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00012.png", - "frame": {"x":1,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00013.png", - "frame": {"x":1,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00014.png", - "frame": {"x":1,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00015.png", - "frame": {"x":1,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00016.png", - "frame": {"x":1,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00017.png", - "frame": {"x":1,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00018.png", - "frame": {"x":113,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00019.png", - "frame": {"x":113,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00020.png", - "frame": {"x":113,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00021.png", - "frame": {"x":113,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00022.png", - "frame": {"x":113,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00023.png", - "frame": {"x":113,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00024.png", - "frame": {"x":113,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00025.png", - "frame": {"x":113,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00026.png", - "frame": {"x":113,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00027.png", - "frame": {"x":113,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00028.png", - "frame": {"x":113,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00029.png", - "frame": {"x":113,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00030.png", - "frame": {"x":113,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00031.png", - "frame": {"x":113,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00032.png", - "frame": {"x":113,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00033.png", - "frame": {"x":113,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00034.png", - "frame": {"x":113,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00035.png", - "frame": {"x":113,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00036.png", - "frame": {"x":225,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00037.png", - "frame": {"x":225,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00038.png", - "frame": {"x":225,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00039.png", - "frame": {"x":225,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00040.png", - "frame": {"x":225,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00041.png", - "frame": {"x":225,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00042.png", - "frame": {"x":225,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00043.png", - "frame": {"x":225,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00044.png", - "frame": {"x":225,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00045.png", - "frame": {"x":225,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00046.png", - "frame": {"x":225,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00047.png", - "frame": {"x":225,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00048.png", - "frame": {"x":225,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00049.png", - "frame": {"x":225,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00050.png", - "frame": {"x":225,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00051.png", - "frame": {"x":225,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00052.png", - "frame": {"x":225,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00053.png", - "frame": {"x":225,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00054.png", - "frame": {"x":337,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00055.png", - "frame": {"x":337,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00056.png", - "frame": {"x":337,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00057.png", - "frame": {"x":337,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00058.png", - "frame": {"x":337,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00059.png", - "frame": {"x":337,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00060.png", - "frame": {"x":337,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00061.png", - "frame": {"x":337,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00062.png", - "frame": {"x":337,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00063.png", - "frame": {"x":337,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00064.png", - "frame": {"x":337,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00065.png", - "frame": {"x":337,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00066.png", - "frame": {"x":337,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00067.png", - "frame": {"x":337,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00068.png", - "frame": {"x":337,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00069.png", - "frame": {"x":337,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00070.png", - "frame": {"x":337,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00071.png", - "frame": {"x":337,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00072.png", - "frame": {"x":449,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00073.png", - "frame": {"x":449,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00074.png", - "frame": {"x":449,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00075.png", - "frame": {"x":449,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00076.png", - "frame": {"x":449,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00077.png", - "frame": {"x":449,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00078.png", - "frame": {"x":449,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00079.png", - "frame": {"x":449,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00080.png", - "frame": {"x":449,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00081.png", - "frame": {"x":449,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00082.png", - "frame": {"x":449,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00083.png", - "frame": {"x":449,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00084.png", - "frame": {"x":449,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00085.png", - "frame": {"x":449,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00086.png", - "frame": {"x":449,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00087.png", - "frame": {"x":449,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00088.png", - "frame": {"x":449,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00089.png", - "frame": {"x":449,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00090.png", - "frame": {"x":561,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00091.png", - "frame": {"x":561,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00092.png", - "frame": {"x":561,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00093.png", - "frame": {"x":561,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00094.png", - "frame": {"x":561,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00095.png", - "frame": {"x":561,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00096.png", - "frame": {"x":561,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00097.png", - "frame": {"x":561,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00098.png", - "frame": {"x":561,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00099.png", - "frame": {"x":561,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00100.png", - "frame": {"x":561,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00101.png", - "frame": {"x":561,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00102.png", - "frame": {"x":561,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00103.png", - "frame": {"x":561,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00104.png", - "frame": {"x":561,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00105.png", - "frame": {"x":561,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00106.png", - "frame": {"x":561,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00107.png", - "frame": {"x":561,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00108.png", - "frame": {"x":673,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00109.png", - "frame": {"x":673,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00110.png", - "frame": {"x":673,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00111.png", - "frame": {"x":673,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00112.png", - "frame": {"x":673,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00113.png", - "frame": {"x":673,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00114.png", - "frame": {"x":673,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00115.png", - "frame": {"x":673,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00116.png", - "frame": {"x":673,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00117.png", - "frame": {"x":673,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00118.png", - "frame": {"x":673,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00119.png", - "frame": {"x":673,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00120.png", - "frame": {"x":673,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00121.png", - "frame": {"x":673,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00122.png", - "frame": {"x":673,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00123.png", - "frame": {"x":673,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00124.png", - "frame": {"x":673,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00125.png", - "frame": {"x":673,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00126.png", - "frame": {"x":785,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00127.png", - "frame": {"x":785,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00128.png", - "frame": {"x":785,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00129.png", - "frame": {"x":785,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00130.png", - "frame": {"x":785,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00131.png", - "frame": {"x":785,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00132.png", - "frame": {"x":785,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00133.png", - "frame": {"x":785,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00134.png", - "frame": {"x":785,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00135.png", - "frame": {"x":785,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00136.png", - "frame": {"x":785,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00137.png", - "frame": {"x":785,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00138.png", - "frame": {"x":785,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00139.png", - "frame": {"x":785,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00140.png", - "frame": {"x":785,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00141.png", - "frame": {"x":785,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00142.png", - "frame": {"x":785,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00143.png", - "frame": {"x":785,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00144.png", - "frame": {"x":897,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00145.png", - "frame": {"x":897,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00146.png", - "frame": {"x":897,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00147.png", - "frame": {"x":897,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00148.png", - "frame": {"x":897,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00149.png", - "frame": {"x":897,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00150.png", - "frame": {"x":897,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00151.png", - "frame": {"x":897,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00152.png", - "frame": {"x":897,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00153.png", - "frame": {"x":897,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00154.png", - "frame": {"x":897,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00155.png", - "frame": {"x":897,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00156.png", - "frame": {"x":897,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00157.png", - "frame": {"x":897,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00158.png", - "frame": {"x":897,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00159.png", - "frame": {"x":897,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00160.png", - "frame": {"x":897,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00161.png", - "frame": {"x":897,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00162.png", - "frame": {"x":1009,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00163.png", - "frame": {"x":1009,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00164.png", - "frame": {"x":1009,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00165.png", - "frame": {"x":1009,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00166.png", - "frame": {"x":1009,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00167.png", - "frame": {"x":1009,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00168.png", - "frame": {"x":1009,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00169.png", - "frame": {"x":1009,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00170.png", - "frame": {"x":1009,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00171.png", - "frame": {"x":1009,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00172.png", - "frame": {"x":1009,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00173.png", - "frame": {"x":1009,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00174.png", - "frame": {"x":1009,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00175.png", - "frame": {"x":1009,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00176.png", - "frame": {"x":1009,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00177.png", - "frame": {"x":1009,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00178.png", - "frame": {"x":1009,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00179.png", - "frame": {"x":1009,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00180.png", - "frame": {"x":1121,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00181.png", - "frame": {"x":1121,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00182.png", - "frame": {"x":1121,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00183.png", - "frame": {"x":1121,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00184.png", - "frame": {"x":1121,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00185.png", - "frame": {"x":1121,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00186.png", - "frame": {"x":1121,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00187.png", - "frame": {"x":1121,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00188.png", - "frame": {"x":1121,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00189.png", - "frame": {"x":1121,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00190.png", - "frame": {"x":1121,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00191.png", - "frame": {"x":1121,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00192.png", - "frame": {"x":1121,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00193.png", - "frame": {"x":1121,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00194.png", - "frame": {"x":1121,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00195.png", - "frame": {"x":1121,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00196.png", - "frame": {"x":1121,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00197.png", - "frame": {"x":1121,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00198.png", - "frame": {"x":1233,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00199.png", - "frame": {"x":1233,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00200.png", - "frame": {"x":1233,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00201.png", - "frame": {"x":1233,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00202.png", - "frame": {"x":1233,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00203.png", - "frame": {"x":1233,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00204.png", - "frame": {"x":1233,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00205.png", - "frame": {"x":1233,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00206.png", - "frame": {"x":1233,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00207.png", - "frame": {"x":1233,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00208.png", - "frame": {"x":1233,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00209.png", - "frame": {"x":1233,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00210.png", - "frame": {"x":1233,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00211.png", - "frame": {"x":1233,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00212.png", - "frame": {"x":1233,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00213.png", - "frame": {"x":1233,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00214.png", - "frame": {"x":1233,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00215.png", - "frame": {"x":1233,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00216.png", - "frame": {"x":1345,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00217.png", - "frame": {"x":1345,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00218.png", - "frame": {"x":1345,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00219.png", - "frame": {"x":1345,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00220.png", - "frame": {"x":1345,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00221.png", - "frame": {"x":1345,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00222.png", - "frame": {"x":1345,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00223.png", - "frame": {"x":1345,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00224.png", - "frame": {"x":1345,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00225.png", - "frame": {"x":1345,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00226.png", - "frame": {"x":1345,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00227.png", - "frame": {"x":1345,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00228.png", - "frame": {"x":1345,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00229.png", - "frame": {"x":1345,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00230.png", - "frame": {"x":1345,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00231.png", - "frame": {"x":1345,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00232.png", - "frame": {"x":1345,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00233.png", - "frame": {"x":1345,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00234.png", - "frame": {"x":1457,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00235.png", - "frame": {"x":1457,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00236.png", - "frame": {"x":1457,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00237.png", - "frame": {"x":1457,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00238.png", - "frame": {"x":1457,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00239.png", - "frame": {"x":1457,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00240.png", - "frame": {"x":1457,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00241.png", - "frame": {"x":1457,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00242.png", - "frame": {"x":1457,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00243.png", - "frame": {"x":1457,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00244.png", - "frame": {"x":1457,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00245.png", - "frame": {"x":1457,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00246.png", - "frame": {"x":1457,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00247.png", - "frame": {"x":1457,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00248.png", - "frame": {"x":1457,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00249.png", - "frame": {"x":1457,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00250.png", - "frame": {"x":1457,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00251.png", - "frame": {"x":1457,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00252.png", - "frame": {"x":1569,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00253.png", - "frame": {"x":1569,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00254.png", - "frame": {"x":1569,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00255.png", - "frame": {"x":1569,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_button_idle.png", - "format": "RGBA8888", - "size": {"w":1680,"h":2016}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:7307a3ed9f2d674f0bb451b8c2deb928:2f6906784f6b142907d3c0e88e6079f1:3754ddcffd572189fcc53b8e2da7f26e$" -} -} diff --git a/packages/www/src/assets/portal/play_button_idle.png b/packages/www/src/assets/portal/play_button_idle.png deleted file mode 100644 index 3b95b0eb..00000000 Binary files a/packages/www/src/assets/portal/play_button_idle.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_button_intro.json b/packages/www/src/assets/portal/play_button_intro.json deleted file mode 100644 index c3ffa363..00000000 --- a/packages/www/src/assets/portal/play_button_intro.json +++ /dev/null @@ -1,588 +0,0 @@ -{"frames": [ - -{ - "filename": "intro_00000.png", - "frame": {"x":1,"y":1,"w":3,"h":3}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00001.png", - "frame": {"x":911,"y":364,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00002.png", - "frame": {"x":1063,"y":367,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00003.png", - "frame": {"x":1215,"y":372,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00004.png", - "frame": {"x":1367,"y":374,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00005.png", - "frame": {"x":1519,"y":375,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00006.png", - "frame": {"x":1671,"y":379,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00007.png", - "frame": {"x":1823,"y":381,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00008.png", - "frame": {"x":759,"y":362,"w":150,"h":149}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00009.png", - "frame": {"x":456,"y":355,"w":148,"h":149}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":148,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00010.png", - "frame": {"x":607,"y":360,"w":148,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":148,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00011.png", - "frame": {"x":1,"y":349,"w":147,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":147,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00012.png", - "frame": {"x":153,"y":351,"w":147,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":147,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00013.png", - "frame": {"x":305,"y":353,"w":147,"h":149}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":1,"w":147,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00014.png", - "frame": {"x":1867,"y":235,"w":144,"h":148}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":2,"w":144,"h":148}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00015.png", - "frame": {"x":1719,"y":235,"w":142,"h":146}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":3,"w":142,"h":146}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00016.png", - "frame": {"x":1574,"y":233,"w":140,"h":143}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":4,"w":140,"h":143}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00017.png", - "frame": {"x":1432,"y":233,"w":139,"h":140}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":6,"w":139,"h":140}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00018.png", - "frame": {"x":1292,"y":233,"w":138,"h":137}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":7,"w":138,"h":137}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00019.png", - "frame": {"x":1154,"y":231,"w":136,"h":134}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":9,"w":136,"h":134}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00020.png", - "frame": {"x":1018,"y":229,"w":134,"h":133}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":9,"w":134,"h":133}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00021.png", - "frame": {"x":885,"y":229,"w":131,"h":131}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":10,"w":131,"h":131}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00022.png", - "frame": {"x":754,"y":229,"w":129,"h":129}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":10,"y":11,"w":129,"h":129}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00023.png", - "frame": {"x":624,"y":229,"w":128,"h":127}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":12,"w":128,"h":127}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00024.png", - "frame": {"x":496,"y":227,"w":126,"h":126}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":12,"y":12,"w":126,"h":126}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00025.png", - "frame": {"x":370,"y":227,"w":124,"h":124}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":13,"w":124,"h":124}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00026.png", - "frame": {"x":246,"y":227,"w":122,"h":122}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":122,"h":122}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00027.png", - "frame": {"x":1,"y":227,"w":121,"h":120}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":15,"w":121,"h":120}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00028.png", - "frame": {"x":124,"y":227,"w":120,"h":120}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":15,"y":15,"w":120,"h":120}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00029.png", - "frame": {"x":1855,"y":115,"w":118,"h":118}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":16,"w":118,"h":118}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00030.png", - "frame": {"x":1735,"y":115,"w":117,"h":118}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":16,"w":117,"h":118}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00031.png", - "frame": {"x":1381,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00032.png", - "frame": {"x":1499,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00033.png", - "frame": {"x":1617,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00034.png", - "frame": {"x":685,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00035.png", - "frame": {"x":801,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00036.png", - "frame": {"x":917,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00037.png", - "frame": {"x":1033,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00038.png", - "frame": {"x":1149,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00039.png", - "frame": {"x":1265,"y":115,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00040.png", - "frame": {"x":1350,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00041.png", - "frame": {"x":1464,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00042.png", - "frame": {"x":1578,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00043.png", - "frame": {"x":1692,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00044.png", - "frame": {"x":1806,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00045.png", - "frame": {"x":1920,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00046.png", - "frame": {"x":1,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00047.png", - "frame": {"x":115,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00048.png", - "frame": {"x":229,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00049.png", - "frame": {"x":343,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00050.png", - "frame": {"x":457,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00051.png", - "frame": {"x":571,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00052.png", - "frame": {"x":6,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00053.png", - "frame": {"x":118,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00054.png", - "frame": {"x":230,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00055.png", - "frame": {"x":342,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00056.png", - "frame": {"x":454,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00057.png", - "frame": {"x":566,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00058.png", - "frame": {"x":678,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00059.png", - "frame": {"x":790,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00060.png", - "frame": {"x":902,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00061.png", - "frame": {"x":1014,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00062.png", - "frame": {"x":1126,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00063.png", - "frame": {"x":1238,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_button_intro.png", - "format": "RGBA8888", - "size": {"w":2033,"h":532}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:c182f7ef1f119bbfd7cc0a11dba8aad6:0f1ccfe8fb1cdc864d87b7e8f6fb3197:356e3de40db0da0fa679697918a56687$" -} -} diff --git a/packages/www/src/assets/portal/play_button_intro.png b/packages/www/src/assets/portal/play_button_intro.png deleted file mode 100644 index a4d57c84..00000000 Binary files a/packages/www/src/assets/portal/play_button_intro.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_icon_exit.json b/packages/www/src/assets/portal/play_icon_exit.json deleted file mode 100644 index 591a9e56..00000000 --- a/packages/www/src/assets/portal/play_icon_exit.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing_outro_190822_00000.png", - "frame": {"x":82,"y":37,"w":25,"h":13}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":16,"w":25,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00001.png", - "frame": {"x":173,"y":1,"w":27,"h":11}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":16,"w":27,"h":11}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00002.png", - "frame": {"x":186,"y":1,"w":30,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":50,"y":16,"w":30,"h":15}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00003.png", - "frame": {"x":122,"y":35,"w":32,"h":27}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":58,"y":16,"w":32,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00004.png", - "frame": {"x":1,"y":1,"w":22,"h":37}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":72,"y":23,"w":22,"h":37}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00005.png", - "frame": {"x":25,"y":1,"w":17,"h":37}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":77,"y":40,"w":17,"h":37}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00006.png", - "frame": {"x":1,"y":40,"w":31,"h":21}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":63,"w":31,"h":21}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00007.png", - "frame": {"x":34,"y":40,"w":29,"h":19}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":44,"y":65,"w":29,"h":19}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00008.png", - "frame": {"x":65,"y":37,"w":15,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":41,"y":52,"w":15,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00009.png", - "frame": {"x":186,"y":18,"w":19,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":47,"w":19,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00010.png", - "frame": {"x":186,"y":38,"w":18,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":47,"y":46,"w":18,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00011.png", - "frame": {"x":97,"y":37,"w":23,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":45,"y":43,"w":23,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00012.png", - "frame": {"x":156,"y":35,"w":27,"h":28}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":41,"w":27,"h":28}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00013.png", - "frame": {"x":142,"y":1,"w":29,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":39,"w":29,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00014.png", - "frame": {"x":110,"y":1,"w":30,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":39,"w":30,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00015.png", - "frame": {"x":44,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00016.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00017.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00018.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00019.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00020.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00021.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00022.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00023.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00024.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_exit.png", - "format": "RGBA8888", - "size": {"w":217,"h":63}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:c3c530fe6905479b4ca8719a9d079c2e:313834a760df7f23cb3a698e4cd74589:0d545ddd0574d55083449defb59d19dc$" -} -} diff --git a/packages/www/src/assets/portal/play_icon_exit.png b/packages/www/src/assets/portal/play_icon_exit.png deleted file mode 100644 index 610ce6b4..00000000 Binary files a/packages/www/src/assets/portal/play_icon_exit.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_icon_intro.json b/packages/www/src/assets/portal/play_icon_intro.json deleted file mode 100644 index b20bac89..00000000 --- a/packages/www/src/assets/portal/play_icon_intro.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing-intro_190822_00000.png", - "frame": {"x":1,"y":1,"w":35,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":36,"w":35,"h":38}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00001.png", - "frame": {"x":38,"y":1,"w":34,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":36,"w":34,"h":38}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00002.png", - "frame": {"x":74,"y":1,"w":29,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":39,"w":29,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00003.png", - "frame": {"x":1,"y":41,"w":22,"h":24}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":43,"w":22,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00004.png", - "frame": {"x":142,"y":43,"w":17,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":48,"y":46,"w":17,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00005.png", - "frame": {"x":161,"y":40,"w":14,"h":14}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":49,"y":45,"w":14,"h":14}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00006.png", - "frame": {"x":183,"y":1,"w":10,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":54,"y":42,"w":10,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00007.png", - "frame": {"x":183,"y":37,"w":9,"h":9}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":62,"y":38,"w":9,"h":9}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00008.png", - "frame": {"x":183,"y":25,"w":10,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":73,"y":38,"w":10,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00009.png", - "frame": {"x":180,"y":13,"w":10,"h":12}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":82,"y":46,"w":10,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00010.png", - "frame": {"x":168,"y":1,"w":10,"h":13}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":84,"y":59,"w":10,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00011.png", - "frame": {"x":177,"y":48,"w":13,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":76,"y":72,"w":13,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00012.png", - "frame": {"x":139,"y":13,"w":17,"h":12}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":63,"y":80,"w":17,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00013.png", - "frame": {"x":158,"y":13,"w":20,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":49,"y":84,"w":20,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00014.png", - "frame": {"x":160,"y":25,"w":21,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":81,"w":21,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00015.png", - "frame": {"x":114,"y":27,"w":21,"h":18}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":26,"y":73,"w":21,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00016.png", - "frame": {"x":94,"y":35,"w":18,"h":22}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":63,"w":18,"h":22}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00017.png", - "frame": {"x":123,"y":1,"w":14,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":53,"w":14,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00018.png", - "frame": {"x":139,"y":1,"w":10,"h":27}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":42,"w":10,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00019.png", - "frame": {"x":114,"y":50,"w":13,"h":26}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":34,"w":13,"h":26}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00020.png", - "frame": {"x":75,"y":35,"w":17,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":27,"w":17,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00021.png", - "frame": {"x":27,"y":41,"w":21,"h":22}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":22,"w":21,"h":22}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00022.png", - "frame": {"x":50,"y":41,"w":23,"h":19}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":19,"w":23,"h":19}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00023.png", - "frame": {"x":105,"y":1,"w":24,"h":16}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":17,"w":24,"h":16}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00024.png", - "frame": {"x":134,"y":27,"w":24,"h":14}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":35,"y":16,"w":24,"h":14}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_intro.png", - "format": "RGBA8888", - "size": {"w":194,"h":64}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:a423de98fed1e06cc62611996868a2db:909cd8dbde93c0d2fca4402e7546ffd8:5ea08d4d7caaa5043281f5095baffab1$" -} -} diff --git a/packages/www/src/assets/portal/play_icon_intro.png b/packages/www/src/assets/portal/play_icon_intro.png deleted file mode 100644 index 528503d9..00000000 Binary files a/packages/www/src/assets/portal/play_icon_intro.png and /dev/null differ diff --git a/packages/www/src/assets/portal/play_icon_loop.json b/packages/www/src/assets/portal/play_icon_loop.json deleted file mode 100644 index bb8e0f41..00000000 --- a/packages/www/src/assets/portal/play_icon_loop.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing-loop_190822_00000.png", - "frame": {"x":37,"y":97,"w":23,"h":11}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":16,"w":23,"h":11}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00001.png", - "frame": {"x":37,"y":110,"w":23,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":16,"w":23,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00002.png", - "frame": {"x":30,"y":257,"w":24,"h":12}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":51,"y":16,"w":24,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00003.png", - "frame": {"x":34,"y":225,"w":25,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":56,"y":16,"w":25,"h":15}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00004.png", - "frame": {"x":1,"y":252,"w":27,"h":20}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":61,"y":17,"w":27,"h":20}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00005.png", - "frame": {"x":35,"y":180,"w":24,"h":25}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":68,"y":19,"w":24,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00006.png", - "frame": {"x":39,"y":39,"w":21,"h":30}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":74,"y":24,"w":21,"h":30}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00007.png", - "frame": {"x":1,"y":120,"w":16,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":80,"y":30,"w":16,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00008.png", - "frame": {"x":1,"y":58,"w":13,"h":36}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":83,"y":38,"w":13,"h":36}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00009.png", - "frame": {"x":41,"y":1,"w":19,"h":36}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":77,"y":47,"w":19,"h":36}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00010.png", - "frame": {"x":1,"y":151,"w":27,"h":33}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":68,"y":57,"w":27,"h":33}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00011.png", - "frame": {"x":1,"y":73,"w":34,"h":26}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":57,"y":68,"w":34,"h":26}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00012.png", - "frame": {"x":1,"y":1,"w":38,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":76,"w":38,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00013.png", - "frame": {"x":1,"y":21,"w":38,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":81,"w":38,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00014.png", - "frame": {"x":1,"y":36,"w":36,"h":20}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":27,"y":74,"w":36,"h":20}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00015.png", - "frame": {"x":1,"y":197,"w":31,"h":27}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":66,"w":31,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00016.png", - "frame": {"x":1,"y":226,"w":24,"h":31}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":57,"w":24,"h":31}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00017.png", - "frame": {"x":1,"y":101,"w":17,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":47,"w":17,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00018.png", - "frame": {"x":1,"y":138,"w":11,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":39,"w":11,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00019.png", - "frame": {"x":1,"y":180,"w":15,"h":32}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":31,"w":15,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00020.png", - "frame": {"x":37,"y":149,"w":20,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":25,"w":20,"h":29}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00021.png", - "frame": {"x":37,"y":122,"w":22,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":21,"w":22,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00022.png", - "frame": {"x":39,"y":71,"w":24,"h":21}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":18,"w":24,"h":21}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00023.png", - "frame": {"x":34,"y":206,"w":25,"h":17}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":16,"w":25,"h":17}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00024.png", - "frame": {"x":34,"y":242,"w":25,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":16,"w":25,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_loop.png", - "format": "RGBA8888", - "size": {"w":61,"h":273}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:4d92719faa27cbc50926429a66fc808c:25af8a045fca3b76dba8d8d26ed4ccf7:9b86d3b10829102d2ccf1bd5942144f2$" -} -} diff --git a/packages/www/src/assets/portal/play_icon_loop.png b/packages/www/src/assets/portal/play_icon_loop.png deleted file mode 100644 index 27e55e94..00000000 Binary files a/packages/www/src/assets/portal/play_icon_loop.png and /dev/null differ diff --git a/packages/www/src/assets/portal/portal_background_placeholder.png b/packages/www/src/assets/portal/portal_background_placeholder.png deleted file mode 100644 index 31490490..00000000 Binary files a/packages/www/src/assets/portal/portal_background_placeholder.png and /dev/null differ diff --git a/packages/www/src/assets/seo/android-chrome-192x192.png b/packages/www/src/assets/seo/android-chrome-192x192.png deleted file mode 100644 index 28422101..00000000 Binary files a/packages/www/src/assets/seo/android-chrome-192x192.png and /dev/null differ diff --git a/packages/www/src/assets/seo/android-chrome-512x512.png b/packages/www/src/assets/seo/android-chrome-512x512.png deleted file mode 100644 index 6b046664..00000000 Binary files a/packages/www/src/assets/seo/android-chrome-512x512.png and /dev/null differ diff --git a/packages/www/src/assets/seo/apple-touch-icon.png b/packages/www/src/assets/seo/apple-touch-icon.png deleted file mode 100644 index f9de3316..00000000 Binary files a/packages/www/src/assets/seo/apple-touch-icon.png and /dev/null differ diff --git a/packages/www/src/assets/seo/banner.png b/packages/www/src/assets/seo/banner.png deleted file mode 100644 index 3d33ebbe..00000000 Binary files a/packages/www/src/assets/seo/banner.png and /dev/null differ diff --git a/packages/www/src/assets/seo/browserconfig.xml b/packages/www/src/assets/seo/browserconfig.xml deleted file mode 100644 index 7c714d03..00000000 --- a/packages/www/src/assets/seo/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #ffede5 - - - diff --git a/packages/www/src/assets/seo/code.avif b/packages/www/src/assets/seo/code.avif deleted file mode 100644 index a5cf1261..00000000 Binary files a/packages/www/src/assets/seo/code.avif and /dev/null differ diff --git a/packages/www/src/assets/seo/favicon-16x16.png b/packages/www/src/assets/seo/favicon-16x16.png deleted file mode 100644 index 9f22bfef..00000000 Binary files a/packages/www/src/assets/seo/favicon-16x16.png and /dev/null differ diff --git a/packages/www/src/assets/seo/favicon-32x32.png b/packages/www/src/assets/seo/favicon-32x32.png deleted file mode 100644 index 79e1cce5..00000000 Binary files a/packages/www/src/assets/seo/favicon-32x32.png and /dev/null differ diff --git a/packages/www/src/assets/seo/favicon.ico b/packages/www/src/assets/seo/favicon.ico deleted file mode 100644 index 66491241..00000000 Binary files a/packages/www/src/assets/seo/favicon.ico and /dev/null differ diff --git a/packages/www/src/assets/seo/image.png b/packages/www/src/assets/seo/image.png deleted file mode 100644 index db99ba60..00000000 Binary files a/packages/www/src/assets/seo/image.png and /dev/null differ diff --git a/packages/www/src/assets/seo/mstile-150x150.png b/packages/www/src/assets/seo/mstile-150x150.png deleted file mode 100644 index 13f0df9d..00000000 Binary files a/packages/www/src/assets/seo/mstile-150x150.png and /dev/null differ diff --git a/packages/www/src/assets/seo/safari-pinned-tab.svg b/packages/www/src/assets/seo/safari-pinned-tab.svg deleted file mode 100644 index 0090cd78..00000000 --- a/packages/www/src/assets/seo/safari-pinned-tab.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - - diff --git a/packages/www/src/assets/seo/site.webmanifest b/packages/www/src/assets/seo/site.webmanifest deleted file mode 100644 index 4853690e..00000000 --- a/packages/www/src/assets/seo/site.webmanifest +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Nestri", - "short_name": "Nestri", - "icons": [ - { - "src": "/icons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/icons/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#fafafa", - "background_color": "#fafafa", - "display": "standalone"} diff --git a/packages/www/src/common/context.tsx b/packages/www/src/common/context.tsx deleted file mode 100644 index ea8cee58..00000000 --- a/packages/www/src/common/context.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { JSX, ParentProps, Show, createContext, useContext } from "solid-js"; - -export function createInitializedContext< - Name extends string, - T extends { ready: boolean } ->(name: Name, cb: () => T) { - const ctx = createContext(); - - return { - use: () => { - const context = useContext(ctx); - if (!context) throw new Error(`No ${name} context`); - return context; - }, - provider: (props: ParentProps & { loadingUI?: JSX.Element }) => { - const value = cb(); - return ( - - - {props.children} - - - ); - }, - } -} \ No newline at end of file diff --git a/packages/www/src/common/portal/assets/play_button_idle.json b/packages/www/src/common/portal/assets/play_button_idle.json deleted file mode 100644 index a1e5cd9d..00000000 --- a/packages/www/src/common/portal/assets/play_button_idle.json +++ /dev/null @@ -1,2316 +0,0 @@ -{"frames": [ - -{ - "filename": "loop_190910_00000.png", - "frame": {"x":1,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00001.png", - "frame": {"x":1,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00002.png", - "frame": {"x":1,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00003.png", - "frame": {"x":1,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00004.png", - "frame": {"x":1,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00005.png", - "frame": {"x":1,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00006.png", - "frame": {"x":1,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00007.png", - "frame": {"x":1,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00008.png", - "frame": {"x":1,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00009.png", - "frame": {"x":1,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00010.png", - "frame": {"x":1,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00011.png", - "frame": {"x":1,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00012.png", - "frame": {"x":1,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00013.png", - "frame": {"x":1,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00014.png", - "frame": {"x":1,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00015.png", - "frame": {"x":1,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00016.png", - "frame": {"x":1,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00017.png", - "frame": {"x":1,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00018.png", - "frame": {"x":113,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00019.png", - "frame": {"x":113,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00020.png", - "frame": {"x":113,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00021.png", - "frame": {"x":113,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00022.png", - "frame": {"x":113,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00023.png", - "frame": {"x":113,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00024.png", - "frame": {"x":113,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00025.png", - "frame": {"x":113,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00026.png", - "frame": {"x":113,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00027.png", - "frame": {"x":113,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00028.png", - "frame": {"x":113,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00029.png", - "frame": {"x":113,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00030.png", - "frame": {"x":113,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00031.png", - "frame": {"x":113,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00032.png", - "frame": {"x":113,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00033.png", - "frame": {"x":113,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00034.png", - "frame": {"x":113,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00035.png", - "frame": {"x":113,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00036.png", - "frame": {"x":225,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00037.png", - "frame": {"x":225,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00038.png", - "frame": {"x":225,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00039.png", - "frame": {"x":225,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00040.png", - "frame": {"x":225,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00041.png", - "frame": {"x":225,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00042.png", - "frame": {"x":225,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00043.png", - "frame": {"x":225,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00044.png", - "frame": {"x":225,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00045.png", - "frame": {"x":225,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00046.png", - "frame": {"x":225,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00047.png", - "frame": {"x":225,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00048.png", - "frame": {"x":225,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00049.png", - "frame": {"x":225,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00050.png", - "frame": {"x":225,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00051.png", - "frame": {"x":225,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00052.png", - "frame": {"x":225,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00053.png", - "frame": {"x":225,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00054.png", - "frame": {"x":337,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00055.png", - "frame": {"x":337,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00056.png", - "frame": {"x":337,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00057.png", - "frame": {"x":337,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00058.png", - "frame": {"x":337,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00059.png", - "frame": {"x":337,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00060.png", - "frame": {"x":337,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00061.png", - "frame": {"x":337,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00062.png", - "frame": {"x":337,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00063.png", - "frame": {"x":337,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00064.png", - "frame": {"x":337,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00065.png", - "frame": {"x":337,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00066.png", - "frame": {"x":337,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00067.png", - "frame": {"x":337,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00068.png", - "frame": {"x":337,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00069.png", - "frame": {"x":337,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00070.png", - "frame": {"x":337,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00071.png", - "frame": {"x":337,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00072.png", - "frame": {"x":449,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00073.png", - "frame": {"x":449,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00074.png", - "frame": {"x":449,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00075.png", - "frame": {"x":449,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00076.png", - "frame": {"x":449,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00077.png", - "frame": {"x":449,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00078.png", - "frame": {"x":449,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00079.png", - "frame": {"x":449,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00080.png", - "frame": {"x":449,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00081.png", - "frame": {"x":449,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00082.png", - "frame": {"x":449,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00083.png", - "frame": {"x":449,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00084.png", - "frame": {"x":449,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00085.png", - "frame": {"x":449,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00086.png", - "frame": {"x":449,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00087.png", - "frame": {"x":449,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00088.png", - "frame": {"x":449,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00089.png", - "frame": {"x":449,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00090.png", - "frame": {"x":561,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00091.png", - "frame": {"x":561,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00092.png", - "frame": {"x":561,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00093.png", - "frame": {"x":561,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00094.png", - "frame": {"x":561,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00095.png", - "frame": {"x":561,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00096.png", - "frame": {"x":561,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00097.png", - "frame": {"x":561,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00098.png", - "frame": {"x":561,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00099.png", - "frame": {"x":561,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00100.png", - "frame": {"x":561,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00101.png", - "frame": {"x":561,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00102.png", - "frame": {"x":561,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00103.png", - "frame": {"x":561,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00104.png", - "frame": {"x":561,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00105.png", - "frame": {"x":561,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00106.png", - "frame": {"x":561,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00107.png", - "frame": {"x":561,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00108.png", - "frame": {"x":673,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00109.png", - "frame": {"x":673,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00110.png", - "frame": {"x":673,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00111.png", - "frame": {"x":673,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00112.png", - "frame": {"x":673,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00113.png", - "frame": {"x":673,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00114.png", - "frame": {"x":673,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00115.png", - "frame": {"x":673,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00116.png", - "frame": {"x":673,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00117.png", - "frame": {"x":673,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00118.png", - "frame": {"x":673,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00119.png", - "frame": {"x":673,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00120.png", - "frame": {"x":673,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00121.png", - "frame": {"x":673,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00122.png", - "frame": {"x":673,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00123.png", - "frame": {"x":673,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00124.png", - "frame": {"x":673,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00125.png", - "frame": {"x":673,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00126.png", - "frame": {"x":785,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00127.png", - "frame": {"x":785,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00128.png", - "frame": {"x":785,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00129.png", - "frame": {"x":785,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00130.png", - "frame": {"x":785,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00131.png", - "frame": {"x":785,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00132.png", - "frame": {"x":785,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00133.png", - "frame": {"x":785,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00134.png", - "frame": {"x":785,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00135.png", - "frame": {"x":785,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00136.png", - "frame": {"x":785,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00137.png", - "frame": {"x":785,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00138.png", - "frame": {"x":785,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00139.png", - "frame": {"x":785,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00140.png", - "frame": {"x":785,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00141.png", - "frame": {"x":785,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00142.png", - "frame": {"x":785,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00143.png", - "frame": {"x":785,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00144.png", - "frame": {"x":897,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00145.png", - "frame": {"x":897,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00146.png", - "frame": {"x":897,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00147.png", - "frame": {"x":897,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00148.png", - "frame": {"x":897,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00149.png", - "frame": {"x":897,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00150.png", - "frame": {"x":897,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00151.png", - "frame": {"x":897,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00152.png", - "frame": {"x":897,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00153.png", - "frame": {"x":897,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00154.png", - "frame": {"x":897,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00155.png", - "frame": {"x":897,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00156.png", - "frame": {"x":897,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00157.png", - "frame": {"x":897,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00158.png", - "frame": {"x":897,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00159.png", - "frame": {"x":897,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00160.png", - "frame": {"x":897,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00161.png", - "frame": {"x":897,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00162.png", - "frame": {"x":1009,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00163.png", - "frame": {"x":1009,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00164.png", - "frame": {"x":1009,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00165.png", - "frame": {"x":1009,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00166.png", - "frame": {"x":1009,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00167.png", - "frame": {"x":1009,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00168.png", - "frame": {"x":1009,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00169.png", - "frame": {"x":1009,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00170.png", - "frame": {"x":1009,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00171.png", - "frame": {"x":1009,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00172.png", - "frame": {"x":1009,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00173.png", - "frame": {"x":1009,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00174.png", - "frame": {"x":1009,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00175.png", - "frame": {"x":1009,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00176.png", - "frame": {"x":1009,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00177.png", - "frame": {"x":1009,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00178.png", - "frame": {"x":1009,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00179.png", - "frame": {"x":1009,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00180.png", - "frame": {"x":1121,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00181.png", - "frame": {"x":1121,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00182.png", - "frame": {"x":1121,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00183.png", - "frame": {"x":1121,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00184.png", - "frame": {"x":1121,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00185.png", - "frame": {"x":1121,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00186.png", - "frame": {"x":1121,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00187.png", - "frame": {"x":1121,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00188.png", - "frame": {"x":1121,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00189.png", - "frame": {"x":1121,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00190.png", - "frame": {"x":1121,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00191.png", - "frame": {"x":1121,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00192.png", - "frame": {"x":1121,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00193.png", - "frame": {"x":1121,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00194.png", - "frame": {"x":1121,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00195.png", - "frame": {"x":1121,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00196.png", - "frame": {"x":1121,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00197.png", - "frame": {"x":1121,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00198.png", - "frame": {"x":1233,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00199.png", - "frame": {"x":1233,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00200.png", - "frame": {"x":1233,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00201.png", - "frame": {"x":1233,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00202.png", - "frame": {"x":1233,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00203.png", - "frame": {"x":1233,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00204.png", - "frame": {"x":1233,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00205.png", - "frame": {"x":1233,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00206.png", - "frame": {"x":1233,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00207.png", - "frame": {"x":1233,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00208.png", - "frame": {"x":1233,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00209.png", - "frame": {"x":1233,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00210.png", - "frame": {"x":1233,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00211.png", - "frame": {"x":1233,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00212.png", - "frame": {"x":1233,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00213.png", - "frame": {"x":1233,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00214.png", - "frame": {"x":1233,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00215.png", - "frame": {"x":1233,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00216.png", - "frame": {"x":1345,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00217.png", - "frame": {"x":1345,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00218.png", - "frame": {"x":1345,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00219.png", - "frame": {"x":1345,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00220.png", - "frame": {"x":1345,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00221.png", - "frame": {"x":1345,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00222.png", - "frame": {"x":1345,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00223.png", - "frame": {"x":1345,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00224.png", - "frame": {"x":1345,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00225.png", - "frame": {"x":1345,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00226.png", - "frame": {"x":1345,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00227.png", - "frame": {"x":1345,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00228.png", - "frame": {"x":1345,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00229.png", - "frame": {"x":1345,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00230.png", - "frame": {"x":1345,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00231.png", - "frame": {"x":1345,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00232.png", - "frame": {"x":1345,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00233.png", - "frame": {"x":1345,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00234.png", - "frame": {"x":1457,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00235.png", - "frame": {"x":1457,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00236.png", - "frame": {"x":1457,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00237.png", - "frame": {"x":1457,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00238.png", - "frame": {"x":1457,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00239.png", - "frame": {"x":1457,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00240.png", - "frame": {"x":1457,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00241.png", - "frame": {"x":1457,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00242.png", - "frame": {"x":1457,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00243.png", - "frame": {"x":1457,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00244.png", - "frame": {"x":1457,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00245.png", - "frame": {"x":1457,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00246.png", - "frame": {"x":1457,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00247.png", - "frame": {"x":1457,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00248.png", - "frame": {"x":1457,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00249.png", - "frame": {"x":1457,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00250.png", - "frame": {"x":1457,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00251.png", - "frame": {"x":1457,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00252.png", - "frame": {"x":1569,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00253.png", - "frame": {"x":1569,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00254.png", - "frame": {"x":1569,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00255.png", - "frame": {"x":1569,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_button_idle.png", - "format": "RGBA8888", - "size": {"w":1680,"h":2016}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:7307a3ed9f2d674f0bb451b8c2deb928:2f6906784f6b142907d3c0e88e6079f1:3754ddcffd572189fcc53b8e2da7f26e$" -} -} diff --git a/packages/www/src/common/portal/assets/play_button_intro.json b/packages/www/src/common/portal/assets/play_button_intro.json deleted file mode 100644 index c3ffa363..00000000 --- a/packages/www/src/common/portal/assets/play_button_intro.json +++ /dev/null @@ -1,588 +0,0 @@ -{"frames": [ - -{ - "filename": "intro_00000.png", - "frame": {"x":1,"y":1,"w":3,"h":3}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00001.png", - "frame": {"x":911,"y":364,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00002.png", - "frame": {"x":1063,"y":367,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00003.png", - "frame": {"x":1215,"y":372,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00004.png", - "frame": {"x":1367,"y":374,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00005.png", - "frame": {"x":1519,"y":375,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00006.png", - "frame": {"x":1671,"y":379,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00007.png", - "frame": {"x":1823,"y":381,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00008.png", - "frame": {"x":759,"y":362,"w":150,"h":149}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00009.png", - "frame": {"x":456,"y":355,"w":148,"h":149}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":148,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00010.png", - "frame": {"x":607,"y":360,"w":148,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":148,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00011.png", - "frame": {"x":1,"y":349,"w":147,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":147,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00012.png", - "frame": {"x":153,"y":351,"w":147,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":147,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00013.png", - "frame": {"x":305,"y":353,"w":147,"h":149}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":1,"w":147,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00014.png", - "frame": {"x":1867,"y":235,"w":144,"h":148}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":2,"w":144,"h":148}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00015.png", - "frame": {"x":1719,"y":235,"w":142,"h":146}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":3,"w":142,"h":146}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00016.png", - "frame": {"x":1574,"y":233,"w":140,"h":143}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":4,"w":140,"h":143}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00017.png", - "frame": {"x":1432,"y":233,"w":139,"h":140}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":6,"w":139,"h":140}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00018.png", - "frame": {"x":1292,"y":233,"w":138,"h":137}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":7,"w":138,"h":137}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00019.png", - "frame": {"x":1154,"y":231,"w":136,"h":134}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":9,"w":136,"h":134}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00020.png", - "frame": {"x":1018,"y":229,"w":134,"h":133}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":9,"w":134,"h":133}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00021.png", - "frame": {"x":885,"y":229,"w":131,"h":131}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":10,"w":131,"h":131}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00022.png", - "frame": {"x":754,"y":229,"w":129,"h":129}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":10,"y":11,"w":129,"h":129}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00023.png", - "frame": {"x":624,"y":229,"w":128,"h":127}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":12,"w":128,"h":127}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00024.png", - "frame": {"x":496,"y":227,"w":126,"h":126}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":12,"y":12,"w":126,"h":126}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00025.png", - "frame": {"x":370,"y":227,"w":124,"h":124}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":13,"w":124,"h":124}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00026.png", - "frame": {"x":246,"y":227,"w":122,"h":122}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":122,"h":122}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00027.png", - "frame": {"x":1,"y":227,"w":121,"h":120}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":15,"w":121,"h":120}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00028.png", - "frame": {"x":124,"y":227,"w":120,"h":120}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":15,"y":15,"w":120,"h":120}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00029.png", - "frame": {"x":1855,"y":115,"w":118,"h":118}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":16,"w":118,"h":118}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00030.png", - "frame": {"x":1735,"y":115,"w":117,"h":118}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":16,"w":117,"h":118}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00031.png", - "frame": {"x":1381,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00032.png", - "frame": {"x":1499,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00033.png", - "frame": {"x":1617,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00034.png", - "frame": {"x":685,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00035.png", - "frame": {"x":801,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00036.png", - "frame": {"x":917,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00037.png", - "frame": {"x":1033,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00038.png", - "frame": {"x":1149,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00039.png", - "frame": {"x":1265,"y":115,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00040.png", - "frame": {"x":1350,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00041.png", - "frame": {"x":1464,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00042.png", - "frame": {"x":1578,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00043.png", - "frame": {"x":1692,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00044.png", - "frame": {"x":1806,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00045.png", - "frame": {"x":1920,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00046.png", - "frame": {"x":1,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00047.png", - "frame": {"x":115,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00048.png", - "frame": {"x":229,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00049.png", - "frame": {"x":343,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00050.png", - "frame": {"x":457,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00051.png", - "frame": {"x":571,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00052.png", - "frame": {"x":6,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00053.png", - "frame": {"x":118,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00054.png", - "frame": {"x":230,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00055.png", - "frame": {"x":342,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00056.png", - "frame": {"x":454,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00057.png", - "frame": {"x":566,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00058.png", - "frame": {"x":678,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00059.png", - "frame": {"x":790,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00060.png", - "frame": {"x":902,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00061.png", - "frame": {"x":1014,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00062.png", - "frame": {"x":1126,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00063.png", - "frame": {"x":1238,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_button_intro.png", - "format": "RGBA8888", - "size": {"w":2033,"h":532}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:c182f7ef1f119bbfd7cc0a11dba8aad6:0f1ccfe8fb1cdc864d87b7e8f6fb3197:356e3de40db0da0fa679697918a56687$" -} -} diff --git a/packages/www/src/common/portal/assets/play_icon_exit.json b/packages/www/src/common/portal/assets/play_icon_exit.json deleted file mode 100644 index 591a9e56..00000000 --- a/packages/www/src/common/portal/assets/play_icon_exit.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing_outro_190822_00000.png", - "frame": {"x":82,"y":37,"w":25,"h":13}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":16,"w":25,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00001.png", - "frame": {"x":173,"y":1,"w":27,"h":11}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":16,"w":27,"h":11}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00002.png", - "frame": {"x":186,"y":1,"w":30,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":50,"y":16,"w":30,"h":15}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00003.png", - "frame": {"x":122,"y":35,"w":32,"h":27}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":58,"y":16,"w":32,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00004.png", - "frame": {"x":1,"y":1,"w":22,"h":37}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":72,"y":23,"w":22,"h":37}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00005.png", - "frame": {"x":25,"y":1,"w":17,"h":37}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":77,"y":40,"w":17,"h":37}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00006.png", - "frame": {"x":1,"y":40,"w":31,"h":21}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":63,"w":31,"h":21}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00007.png", - "frame": {"x":34,"y":40,"w":29,"h":19}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":44,"y":65,"w":29,"h":19}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00008.png", - "frame": {"x":65,"y":37,"w":15,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":41,"y":52,"w":15,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00009.png", - "frame": {"x":186,"y":18,"w":19,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":47,"w":19,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00010.png", - "frame": {"x":186,"y":38,"w":18,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":47,"y":46,"w":18,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00011.png", - "frame": {"x":97,"y":37,"w":23,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":45,"y":43,"w":23,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00012.png", - "frame": {"x":156,"y":35,"w":27,"h":28}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":41,"w":27,"h":28}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00013.png", - "frame": {"x":142,"y":1,"w":29,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":39,"w":29,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00014.png", - "frame": {"x":110,"y":1,"w":30,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":39,"w":30,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00015.png", - "frame": {"x":44,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00016.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00017.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00018.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00019.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00020.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00021.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00022.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00023.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00024.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_exit.png", - "format": "RGBA8888", - "size": {"w":217,"h":63}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:c3c530fe6905479b4ca8719a9d079c2e:313834a760df7f23cb3a698e4cd74589:0d545ddd0574d55083449defb59d19dc$" -} -} diff --git a/packages/www/src/common/portal/assets/play_icon_intro.json b/packages/www/src/common/portal/assets/play_icon_intro.json deleted file mode 100644 index b20bac89..00000000 --- a/packages/www/src/common/portal/assets/play_icon_intro.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing-intro_190822_00000.png", - "frame": {"x":1,"y":1,"w":35,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":36,"w":35,"h":38}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00001.png", - "frame": {"x":38,"y":1,"w":34,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":36,"w":34,"h":38}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00002.png", - "frame": {"x":74,"y":1,"w":29,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":39,"w":29,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00003.png", - "frame": {"x":1,"y":41,"w":22,"h":24}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":43,"w":22,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00004.png", - "frame": {"x":142,"y":43,"w":17,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":48,"y":46,"w":17,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00005.png", - "frame": {"x":161,"y":40,"w":14,"h":14}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":49,"y":45,"w":14,"h":14}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00006.png", - "frame": {"x":183,"y":1,"w":10,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":54,"y":42,"w":10,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00007.png", - "frame": {"x":183,"y":37,"w":9,"h":9}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":62,"y":38,"w":9,"h":9}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00008.png", - "frame": {"x":183,"y":25,"w":10,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":73,"y":38,"w":10,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00009.png", - "frame": {"x":180,"y":13,"w":10,"h":12}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":82,"y":46,"w":10,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00010.png", - "frame": {"x":168,"y":1,"w":10,"h":13}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":84,"y":59,"w":10,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00011.png", - "frame": {"x":177,"y":48,"w":13,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":76,"y":72,"w":13,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00012.png", - "frame": {"x":139,"y":13,"w":17,"h":12}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":63,"y":80,"w":17,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00013.png", - "frame": {"x":158,"y":13,"w":20,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":49,"y":84,"w":20,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00014.png", - "frame": {"x":160,"y":25,"w":21,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":81,"w":21,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00015.png", - "frame": {"x":114,"y":27,"w":21,"h":18}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":26,"y":73,"w":21,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00016.png", - "frame": {"x":94,"y":35,"w":18,"h":22}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":63,"w":18,"h":22}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00017.png", - "frame": {"x":123,"y":1,"w":14,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":53,"w":14,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00018.png", - "frame": {"x":139,"y":1,"w":10,"h":27}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":42,"w":10,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00019.png", - "frame": {"x":114,"y":50,"w":13,"h":26}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":34,"w":13,"h":26}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00020.png", - "frame": {"x":75,"y":35,"w":17,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":27,"w":17,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00021.png", - "frame": {"x":27,"y":41,"w":21,"h":22}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":22,"w":21,"h":22}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00022.png", - "frame": {"x":50,"y":41,"w":23,"h":19}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":19,"w":23,"h":19}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00023.png", - "frame": {"x":105,"y":1,"w":24,"h":16}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":17,"w":24,"h":16}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00024.png", - "frame": {"x":134,"y":27,"w":24,"h":14}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":35,"y":16,"w":24,"h":14}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_intro.png", - "format": "RGBA8888", - "size": {"w":194,"h":64}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:a423de98fed1e06cc62611996868a2db:909cd8dbde93c0d2fca4402e7546ffd8:5ea08d4d7caaa5043281f5095baffab1$" -} -} diff --git a/packages/www/src/common/portal/assets/play_icon_loop.json b/packages/www/src/common/portal/assets/play_icon_loop.json deleted file mode 100644 index bb8e0f41..00000000 --- a/packages/www/src/common/portal/assets/play_icon_loop.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing-loop_190822_00000.png", - "frame": {"x":37,"y":97,"w":23,"h":11}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":16,"w":23,"h":11}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00001.png", - "frame": {"x":37,"y":110,"w":23,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":16,"w":23,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00002.png", - "frame": {"x":30,"y":257,"w":24,"h":12}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":51,"y":16,"w":24,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00003.png", - "frame": {"x":34,"y":225,"w":25,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":56,"y":16,"w":25,"h":15}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00004.png", - "frame": {"x":1,"y":252,"w":27,"h":20}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":61,"y":17,"w":27,"h":20}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00005.png", - "frame": {"x":35,"y":180,"w":24,"h":25}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":68,"y":19,"w":24,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00006.png", - "frame": {"x":39,"y":39,"w":21,"h":30}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":74,"y":24,"w":21,"h":30}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00007.png", - "frame": {"x":1,"y":120,"w":16,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":80,"y":30,"w":16,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00008.png", - "frame": {"x":1,"y":58,"w":13,"h":36}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":83,"y":38,"w":13,"h":36}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00009.png", - "frame": {"x":41,"y":1,"w":19,"h":36}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":77,"y":47,"w":19,"h":36}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00010.png", - "frame": {"x":1,"y":151,"w":27,"h":33}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":68,"y":57,"w":27,"h":33}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00011.png", - "frame": {"x":1,"y":73,"w":34,"h":26}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":57,"y":68,"w":34,"h":26}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00012.png", - "frame": {"x":1,"y":1,"w":38,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":76,"w":38,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00013.png", - "frame": {"x":1,"y":21,"w":38,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":81,"w":38,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00014.png", - "frame": {"x":1,"y":36,"w":36,"h":20}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":27,"y":74,"w":36,"h":20}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00015.png", - "frame": {"x":1,"y":197,"w":31,"h":27}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":66,"w":31,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00016.png", - "frame": {"x":1,"y":226,"w":24,"h":31}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":57,"w":24,"h":31}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00017.png", - "frame": {"x":1,"y":101,"w":17,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":47,"w":17,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00018.png", - "frame": {"x":1,"y":138,"w":11,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":39,"w":11,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00019.png", - "frame": {"x":1,"y":180,"w":15,"h":32}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":31,"w":15,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00020.png", - "frame": {"x":37,"y":149,"w":20,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":25,"w":20,"h":29}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00021.png", - "frame": {"x":37,"y":122,"w":22,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":21,"w":22,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00022.png", - "frame": {"x":39,"y":71,"w":24,"h":21}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":18,"w":24,"h":21}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00023.png", - "frame": {"x":34,"y":206,"w":25,"h":17}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":16,"w":25,"h":17}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00024.png", - "frame": {"x":34,"y":242,"w":25,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":16,"w":25,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_loop.png", - "format": "RGBA8888", - "size": {"w":61,"h":273}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:4d92719faa27cbc50926429a66fc808c:25af8a045fca3b76dba8d8d26ed4ccf7:9b86d3b10829102d2ccf1bd5942144f2$" -} -} diff --git a/packages/www/src/common/portal/button.ts b/packages/www/src/common/portal/button.ts deleted file mode 100644 index f7028443..00000000 --- a/packages/www/src/common/portal/button.ts +++ /dev/null @@ -1,309 +0,0 @@ -import PlayIconLoop from "./assets/play_icon_loop.json" -import PlayIconExit from "./assets/play_icon_exit.json" -import PlayIconIntro from "./assets/play_icon_intro.json" -import PlayButtonIdle from "./assets/play_button_idle.json" -import PlayButtonIntro from "./assets/play_button_intro.json" - -const button_assets = { - intro: { - image: "/src/assets/portal/play_button_intro.png", - json: PlayButtonIntro - }, - idle: { - image: "/src/assets/portal/play_button_idle.png", - json: PlayButtonIdle - } -} - -const icon_assets = { - intro: { - image: "/src/assets/portal/play_icon_intro.png", - json: PlayIconIntro - }, - loop: { - image: "/src/assets/portal/play_icon_loop.png", - json: PlayIconLoop - }, - exit: { - image: "/src/assets/portal/play_icon_exit.png", - json: PlayIconExit - } -} - -export class PortalButton { - private canvas: HTMLCanvasElement; - private currentFrame: number; - private index: number; - private buttonQueue: (() => void)[]; - private isButtonRunning: boolean; - private animationSpeed: number; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.currentFrame = 0; - this.index = 0; - this.buttonQueue = []; - this.isButtonRunning = false; - this.animationSpeed = 50; - } - - render(type: "intro" | "idle", loop: boolean, image: HTMLImageElement, index?: number) { - if (index) this.index = index - return new Promise((resolve) => { - const buttonTask = () => { - // Get the canvas element - const ctx = this.canvas.getContext('2d'); - - // Load the JSON data - const animationData = button_assets[type].json; - - // Play the animation - const frames = animationData.frames; - const totalFrames = frames.length; - - if (this.index) this.currentFrame = this.index; - - const targetDim = 100 //target dimensions of the output image (height, width) - - // Start the animation - const updateFrame = () => { - - // Check if we have reached the last frame - if (!loop && this.currentFrame === totalFrames - 1) { - // Animation has reached the last frame, stop playing - this.isButtonRunning = false; - - // Resolve the Promise to indicate completion - resolve(); - return null; - } - - // Clear the canvas - ctx?.clearRect(0, 0, this.canvas.width, this.canvas.height); - - // Get the current frame details - const singleFrame = frames[this.currentFrame]; - const { frame, sourceSize: ss, rotated, spriteSourceSize: sss, trimmed } = singleFrame; - - this.canvas.width = targetDim; - this.canvas.height = targetDim; - this.canvas.style.borderRadius = `${ss.h / 2}px` - - const newSize = { - w: frame.w, - h: frame.h - }; - - const newPosition = { - x: 0, - y: 0 - }; - - if (rotated) { - ctx?.save() - ctx?.translate(this.canvas.width / 2, this.canvas.height / 2) - ctx?.rotate(-Math.PI / 2); - ctx?.translate(-this.canvas.height / 2, -this.canvas.width / 2); - - newSize.w = frame.h; - newSize.h = frame.w; - } - - if (trimmed) { - newPosition.x = sss.x; - newPosition.y = sss.y; - - if (rotated) { - newPosition.x = this.canvas.height - sss.h - sss.y; - newPosition.y = sss.x; - } - } - - const scaleFactor = Math.min(targetDim / newSize.w, targetDim / newSize.h); - const scaledWidth = newSize.w * scaleFactor; - const scaledHeight = newSize.h * scaleFactor; - - // Calculate the center position to draw the resized image - const x = (targetDim - scaledWidth) / 2; - const y = (targetDim - scaledHeight) / 2; - - ctx?.drawImage( - image, - frame.x, - frame.y, - newSize.w, - newSize.h, - x, - y, - scaledWidth, - scaledHeight - ) - - - if (rotated) { - ctx?.restore() - } - // Increment the frame index - this.currentFrame = (this.currentFrame + 1) % totalFrames - - // Schedule the next frame update - setTimeout(updateFrame, this.animationSpeed); - }; - - return updateFrame() - } - // Check if the button function is already running - if (this.isButtonRunning) { - // If running, add the button task to the queue - this.buttonQueue.push(buttonTask); - - } else { - // If not running, set the flag and execute the button task immediately - this.isButtonRunning = true; - buttonTask(); - } - }) - } -} - -export class PortalIcon { - private canvas: HTMLCanvasElement; - private currentFrame: number; - private index: number; - private iconQueue: (() => void)[]; - private isIconRunning: boolean; - private animationSpeed: number; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.currentFrame = 0; - this.index = 0; - this.iconQueue = []; - this.isIconRunning = false; - this.animationSpeed = 50; - } - - render(type: "loop" | "intro" | "exit", loop: boolean, image: HTMLImageElement, play: boolean) { - return new Promise((resolve) => { - const iconTask = () => { - // Get the canvas element - const ctx = this.canvas.getContext('2d'); - - // Load the JSON data - const animationData = icon_assets[type].json; - - // Load the image - // const image = new Image(); - image.src = icon_assets[type].image; // Path to the sprite sheet image - - // Play the animation - const frames = animationData.frames; - const totalFrames = frames.length; - - if (!play) { - this.currentFrame = totalFrames - 3 - } else { this.currentFrame = 0 } - - // Start the animation - const updateFrame = () => { - - // Check if we have reached the last frame - if (!loop && this.currentFrame === totalFrames - 1) { - // Animation has reached the last frame, stop playing - this.isIconRunning = false; - - // Resolve the Promise to indicate completion - resolve(); - return; - } - - // Clear the canvas - ctx?.clearRect(0, 0, this.canvas.width, this.canvas.height); - - // Get the current frame details - const singleFrame = frames[this.currentFrame]; - const { frame, sourceSize: ss, rotated, spriteSourceSize: sss, trimmed } = singleFrame; - - this.canvas.width = ss.w; - this.canvas.height = ss.h - this.canvas.style.borderRadius = `${ss.h / 2}px` - - const newSize = { - w: frame.w, - h: frame.h - }; - - const newPosition = { - x: 0, - y: 0 - }; - - if (rotated) { - ctx?.save() - ctx?.translate(this.canvas.width / 2, this.canvas.height / 2) - ctx?.rotate(-Math.PI / 2); - ctx?.translate(-this.canvas.height / 2, -this.canvas.width / 2); - - newSize.w = frame.h; - newSize.h = frame.w; - } - - if (trimmed) { - newPosition.x = sss.x; - newPosition.y = sss.y; - - if (rotated) { - newPosition.x = this.canvas.height - sss.h - sss.y; - newPosition.y = sss.x; - } - } - - ctx?.drawImage( - image, - frame.x, - frame.y, - newSize.w, - newSize.h, - newPosition.x, - newPosition.y, - newSize.w, - newSize.h - ) - - - if (rotated) { - ctx?.restore() - } - // Increment the frame index - this.currentFrame = (this.currentFrame + 1) % totalFrames - - - // Schedule the next frame update - if (!play) { - this.isIconRunning = false; - - resolve(); - return; - } - - setTimeout(updateFrame, this.animationSpeed) - }; - - return updateFrame(); - } - // Check if the icon function is already running - if (this.isIconRunning) { - // If running, add the button icon to the queue - this.iconQueue.push(iconTask); - } else { - // If not running, set the flag and execute the button task immediately - this.isIconRunning = true; - iconTask(); - } - }) - } - -} - -const portal = { assets: { button_assets, icon_assets } } -export default portal; \ No newline at end of file diff --git a/packages/www/src/common/portal/index.tsx b/packages/www/src/common/portal/index.tsx deleted file mode 100644 index 7729b6ee..00000000 --- a/packages/www/src/common/portal/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { createEffect, createSignal, onCleanup } from "solid-js"; -import portalbtn, { PortalButton, PortalIcon } from "./button"; -import { styled } from "@macaron-css/solid"; -import { theme } from "@nestri/www/ui"; - - -const PlayBtn = styled("button", { - base: { - position: "relative", - backgroundColor: "transparent", - outline: "none", - border: "none", - padding: 0, - margin: 0, - height: 100, - borderRadius: 999, - ":focus": { - outline: `3px solid ${theme.color.brand}` - } - } -}) - -const CanvasOne = styled("canvas", { - base: { - position: "absolute", - inset: 0, - height: "100%", - width: "100%", - borderRadius: 999, - } -}) - -const CanvasTwo = styled("canvas", { - base: { - position: "relative", - inset: 0, - zIndex: 1, - height: "100%", - width: "100%", - borderRadius: 999, - } -}) -/** - * Renders a portal play button with animated canvas icons. - * - * This Solid.js component manages two canvas elements that display an animated portal button and its icon. It asynchronously loads a set of image assets and uses instances of PortalButton and PortalIcon to render various animation states—including intro, idle, exit, and loop—on the canvases. Image loading errors are logged to the console. - * - * @returns A JSX element containing a styled button with two canvases for rendering animations. - */ -export function Portal() { - const [iconRef, setIconRef] = createSignal(); - const [buttonRef, setButtonRef] = createSignal(); - - const imageUrls = [ - portalbtn.assets.button_assets["intro"].image, - portalbtn.assets.button_assets["idle"].image, - portalbtn.assets.icon_assets["exit"].image, - portalbtn.assets.icon_assets["intro"].image, - portalbtn.assets.icon_assets["loop"].image - ]; - - const loadImages = () => { - return Promise.all(imageUrls.map(url => { - return new Promise((resolve, reject) => { - const img = new Image(); - img.onload = () => resolve(img); - img.onerror = (e) => { - console.error(`Failed to load image from ${url}:`, e); - reject(new Error(`Failed to load image from ${url}`)); - }; - img.src = url; - }); - })); - } - - createEffect(() => { - (async () => { - const btnRef = buttonRef() - const icnRef = iconRef() - let isActive = true; - - if (icnRef && btnRef) { - try { - - // Destructure images for each animation type - skipping introIconImg at index 3 - const [introImg, idleImg, exitImg, , loopImg] = await loadImages(); - - const button = new PortalButton(btnRef); - const icon = new PortalIcon(icnRef) - if (!isActive) return; - - await button.render("intro", false, introImg as HTMLImageElement); - await icon.render("exit", false, exitImg as HTMLImageElement, false); - await button.render("idle", true, idleImg as HTMLImageElement, 3); - - // Intro and loop animation - await Promise.all([ - (async () => { - if (icnRef) { - await icon.render("loop", false, loopImg as HTMLImageElement, true); - await icon.render("loop", false, loopImg as HTMLImageElement, true); - await icon.render("exit", false, exitImg as HTMLImageElement, true); - } - })(), - button.render("idle", true, idleImg as HTMLImageElement, 2), - ]); - } catch (err) { - console.error("Failed to load animation images:", err); - } - } - onCleanup(() => { - isActive = false; - }); - })() - }); - - return ( - - - - - ) -} \ No newline at end of file diff --git a/packages/www/src/components/index.ts b/packages/www/src/components/index.ts deleted file mode 100644 index a0eefcec..00000000 --- a/packages/www/src/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./qr-code" \ No newline at end of file diff --git a/packages/www/src/components/profile-picture.tsx b/packages/www/src/components/profile-picture.tsx deleted file mode 100644 index 7115a2ff..00000000 --- a/packages/www/src/components/profile-picture.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { createSignal, type JSX, onMount } from "solid-js"; - -type SteamAvatarProps = { - avatarHash: string; - alt?: string; - class?: string; - style?: string | JSX.CSSProperties; -}; - -export default function SteamAvatar(props: SteamAvatarProps) { - const smallUrl = `https://avatars.cloudflare.steamstatic.com/${props.avatarHash}.jpg`; - const fullUrl = `https://avatars.cloudflare.steamstatic.com/${props.avatarHash}_full.jpg`; - - const [src, setSrc] = createSignal(smallUrl); - - onMount(() => { - const img = new Image(); - img.src = fullUrl; - img.onload = () => setSrc(fullUrl); - }); - - return ( - {props.alt - ); -} diff --git a/packages/www/src/components/qr-code.tsx b/packages/www/src/components/qr-code.tsx deleted file mode 100644 index 69ed94a8..00000000 --- a/packages/www/src/components/qr-code.tsx +++ /dev/null @@ -1,378 +0,0 @@ -import { theme } from "@nestri/www/ui"; -import { A } from "@solidjs/router"; -import { styled } from "@macaron-css/solid"; -import { useSteam } from "../providers/steam"; -import { keyframes } from "@macaron-css/core"; -import { QRCode } from "@nestri/www/ui/custom-qr"; -import { createEffect, createSignal, onCleanup, Show } from "solid-js"; - -const EmptyState = styled("div", { - base: { - padding: "0 40px", - display: "flex", - height: "100dvh", - gap: 10, - flexDirection: "column", - alignItems: "center", - justifyContent: "center", - margin: "auto" - } -}) - - -const EmptyStateHeader = styled("h2", { - base: { - textAlign: "center", - fontSize: theme.font.size["2xl"], - fontFamily: theme.font.family.heading, - fontWeight: theme.font.weight.semibold, - letterSpacing: -0.5, - } -}) - -const EmptyStateSubHeader = styled("p", { - base: { - fontWeight: theme.font.weight.regular, - color: theme.color.gray.d900, - fontSize: theme.font.size["base"], - textAlign: "center", - maxWidth: 380, - letterSpacing: -0.4, - lineHeight: 1.1, - } -}) - -const bgRotate = keyframes({ - 'to': { transform: 'rotate(1turn)' }, -}); - -const QRContainer = styled("div", { - base: { - position: "relative", - display: "flex", - overflow: "hidden", - marginBottom: 20, - justifyContent: "center", - alignItems: "center", - borderRadius: 25, - padding: 5, - isolation: "isolate", - ":after": { - content: "", - zIndex: -1, - inset: 5, - backgroundColor: theme.color.background.d100, - borderRadius: 22, - position: "absolute" - } - }, - variants: { - login: { - true: { - ":before": { - content: "", - backgroundImage: `conic-gradient(from 0deg,transparent 0,${theme.color.blue.d600} 10%,${theme.color.blue.d600} 25%,transparent 35%)`, - animation: `${bgRotate} 2.25s linear infinite`, - width: "200%", - height: "200%", - zIndex: -2, - top: "-50%", - left: "-50%", - position: "absolute" - }, - } - } - } -}) - -const QRWrapper = styled("div", { - base: { - backgroundColor: theme.color.background.d100, - position: "relative", - textWrap: "balance", - border: `1px solid ${theme.color.gray.d400}`, - display: "flex", - justifyContent: "center", - alignItems: "center", - overflow: "hidden", - borderRadius: 22, - padding: 20, - } -}) - -const QRBg = styled("div", { - base: { - backgroundColor: theme.color.background.d200, - position: "absolute", - inset: 0, - margin: 5, - borderRadius: 20 - } -}) - -const QRReloadBtn = styled("button", { - base: { - background: "none", - border: "none", - width: 50, - height: 50, - position: "absolute", - borderRadius: 25, - zIndex: 5, - right: 2, - bottom: 2, - cursor: "pointer", - color: theme.color.blue.d700, - transition: "color 200ms", - overflow: "hidden", - display: "flex", - justifyContent: "center", - alignItems: "center", - ":before": { - zIndex: 3, - content: "", - position: "absolute", - inset: 0, - opacity: 0, - transition: "opacity 200ms", - background: "#FFF" - } - } -}) - -const QRRealoadContainer = styled("div", { - base: { - position: "absolute", - inset: 0, - isolation: "isolate", - ":before": { - background: `conic-gradient( from 90deg, currentColor 10%, #FFF 80% )`, - inset: 3, - borderRadius: 16, - position: "absolute", - content: "", - zIndex: 1 - } - } -}) - -const QRReloadSvg = styled("svg", { - base: { - zIndex: 2, - width: "100%", - height: "100%", - position: "relative", - display: "block" - } -}) - -const LogoContainer = styled("div", { - base: { - position: "absolute", - top: 0, - left: 0, - width: "100%", - height: "100%", - } -}) - -const LogoIcon = styled("svg", { - base: { - zIndex: 6, - position: "absolute", - left: "50%", - top: "50%", - transform: "translate(-50%,-50%)", - overflow: "hidden", - // width: "21%", - // height: "21%", - borderRadius: 17, - // ":before": { - // pointerEvents: "none", - // zIndex: 2, - // content: '', - // position: "absolute", - // inset: 0, - // borderRadius: "inherit", - // boxShadow: "inset 0 0 0 1px rgba(0, 0, 0, 0.02)", - // } - } -}) - -const SteamMobileLink = styled(A, { - base: { - textUnderlineOffset: 2, - textDecoration: "none", - color: theme.color.blue.d900, - display: "inline-flex", - justifyContent: "center", - alignItems: "center", - gap: 1, - width: "max-content", - textTransform: "capitalize", - ":hover": { - textDecoration: "underline" - } - } -}) - -/** - * Manages the Steam authentication flow via a reactive hook. - * - * This hook connects to Steam's login stream for QR code authentication, updating the internal state through reactive signals. It sets up event listeners to capture authentication challenges (setting the login URL) and errors (flagging login errors), and it provides methods to initiate and re-establish the connection. - * - * The returned object includes: - * - loginError: A signal that indicates whether an authentication error has occurred. - * - loginUrl: A signal that holds the URL received on a successful authentication challenge. - * - isConnecting: A signal that reflects whether the authentication process is currently in progress. - * - authenticateSteam: A function that initiates the authentication process, sets up event listeners, and returns cleanup and reset functions. - * - reconnect: A function that cleans up any existing connection and initiates a new authentication attempt. - * - * @returns An object with authentication state signals and functions to manage the connection. - */ -export function useSteamAuth() { - const [loginError, setLoginError] = createSignal(false); - const [loginUrl, setLoginUrl] = createSignal(); - const [isConnecting, setIsConnecting] = createSignal(false); - const [disconnectFn, setDisconnectFn] = createSignal<(() => void) | null>(null); - const steam = useSteam() - // Function to authenticate with Steam - const authenticateSteam = async () => { - try { - setIsConnecting(true); - setLoginError(false); - - // Connect to the Steam login stream - const steamConnection = await steam.client.login.connect(); - - // Set up event listeners for different event types - const urlUnsubscribe = steamConnection.addEventListener('challenge', (data) => { - setLoginUrl(data.url); - }); - - const loginUnsuccessfulUnsubscribe = steamConnection.addEventListener('error', (data) => { - setLoginError(true); - }); - - // Store the disconnect function for later use - const cleanupConnection = () => { - urlUnsubscribe(); - loginUnsuccessfulUnsubscribe(); - steamConnection.disconnect(); - }; - - setDisconnectFn(() => cleanupConnection); - setIsConnecting(false); - - return { - cleanup: cleanupConnection, - resetConnection: () => { - cleanupConnection(); - authenticateSteam(); - } - }; - } catch (error) { - setLoginError(true); - setIsConnecting(false); - console.error("Steam authentication error:", error); - return { - cleanup: () => { }, - resetConnection: () => authenticateSteam() - }; - } - }; - - // Function to reconnect - const reconnect = async () => { - // Clean up existing connection if any - const currentDisconnectFn = disconnectFn(); - if (currentDisconnectFn) { - currentDisconnectFn(); - } - - // Start a new connection - return authenticateSteam(); - }; - - return { - loginError, - loginUrl, - isConnecting, - authenticateSteam, - reconnect - }; -} - -/** - * Renders a Steam QR code authentication interface. - * - * On mount, the component initiates the Steam authentication process using a custom hook and sets up a cleanup routine upon unmounting. It conditionally displays a QR code for signing in when a valid login URL is available, a reload button if an error occurs, or a timeout message if the request times out. - * - * @example - * - * - * @returns A Solid.js component that provides a QR code authentication UI for Steam. - */ -export function QrCodeComponent() { - const { loginError, loginUrl, isConnecting, authenticateSteam, reconnect } = useSteamAuth(); - - createEffect(async () => { - const { cleanup } = await authenticateSteam(); - onCleanup(() => cleanup()); - }); - - - return ( - - - - - - - - - - - - - } - > - - - - - reconnect()} disabled={isConnecting()}> - - - - - - - - Request Timed Out - Click above to try again. - - } - when={!loginError() && loginUrl()} > - Sign in to your Steam account - Use your Steam Mobile App to sign in via QR code. Learn More - - - ) -} \ No newline at end of file diff --git a/packages/www/src/index.tsx b/packages/www/src/index.tsx deleted file mode 100644 index 608b9165..00000000 --- a/packages/www/src/index.tsx +++ /dev/null @@ -1,27 +0,0 @@ -/* @refresh reload */ -import { render } from "solid-js/web"; -// import posthog from "posthog-js"; -// posthog.init("phc_M0b2lW4smpsGIufiTBZ22USKwCy0fyqljMOGufJc79p", { -// api_host: "https://telemetry.ion.sst.dev", -// }); - -import "modern-normalize/modern-normalize.css"; -import { App } from "./App"; -import { StorageProvider } from "./providers/account"; - -const root = document.getElementById("root"); - -if (import.meta.env.DEV && !(root instanceof HTMLElement)) { - throw new Error( - "Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got mispelled?" - ); -} - -render( - () => ( - - - - ), - root! -); \ No newline at end of file diff --git a/packages/www/src/pages/new.tsx b/packages/www/src/pages/new.tsx deleted file mode 100644 index 4da01400..00000000 --- a/packages/www/src/pages/new.tsx +++ /dev/null @@ -1,346 +0,0 @@ -import { styled } from "@macaron-css/solid"; -import { theme } from "@nestri/www/ui/theme"; -import { useAccount } from "../providers/account"; -import { Container, Screen as FullScreen } from "@nestri/www/ui/layout"; -import { useNavigate } from "@solidjs/router"; - -const Card = styled("div", { - base: { - gap: 40, - maxWidth: 400, - width: "100%", - display: "flex", - padding: `10px 20px`, - position: "relative", - flexDirection: "column", - justifyContent: "center", - } -}) - -const LogoFooter = styled("section", { - base: { - position: "fixed", - bottom: -1, - fontSize: "100%", - maxWidth: 1440, - width: "100%", - pointerEvents: "none", - display: "flex", - alignItems: "center", - justifyContent: "center", - padding: "0 8px", - zIndex: 10, - overflow: "hidden", - }, -}) - -const Logo = styled("svg", { - base: { - width: "100%", - height: "100%", - transform: "translateY(40%)", - opacity: "70%", - } -}) - -const Title = styled("h1", { - base: { - lineHeight: "2rem", - textWrap: "balance", - letterSpacing: "-0.029375rem", - fontSize: theme.font.size["4xl"], - fontFamily: theme.font.family.heading, - fontWeight: theme.font.weight.semibold, - } -}) - -const Button = styled("button", { - base: { - display: "flex", - justifyContent: "center", - alignItems: "center", - cursor: "pointer", - padding: "0px 14px", - gap: 10, - height: 48, - borderRadius: theme.space["2"], - backgroundColor: theme.color.background.d100, - border: `1px solid ${theme.color.gray.d400}` - }, - variants: { - comingSoon: { - true: { - justifyContent: "space-between", - padding: "10px 20px", - gap: theme.space["2"], - cursor: "not-allowed", - } - }, - steamBtn: { - true: { - color: "#FFF", - backgroundColor: "#2D73FF" - } - } - } -}) - -const ButtonText = styled("span", { - base: { - fontSize: theme.font.size["lg"], - fontWeight: theme.font.weight.medium, - fontFamily: theme.font.family.heading, - position: "relative", - display: "flex", - alignItems: "center" - }, -}) - -const ButtonIcon = styled("svg", { - base: { - height: 28, - width: 28, - } -}) - -const ButtonContainer = styled("div", { - base: { - flexDirection: "column", - display: "flex", - gap: 10, - position: "relative" - } -}) - -const CardWrapper = styled("div", { - base: { - width: "100%", - position: "relative", - height: "max-content", - flexDirection: "row", - display: "flex", - alignItems: "start", - justifyContent: "start", - top: "16vh" - } -}) - -const Footer = styled("div", { - base: { - flexDirection: "column", - display: "flex", - gap: 10 - } -}) - -const Soon = styled("div", { - base: { - borderRadius: ".375rem", - padding: "2px 4px", - fontWeight: theme.font.weight.semibold, - fontFamily: theme.font.family.heading, - fontSize: ".625rem", - color: theme.color.blue.d900, - backgroundColor: theme.color.blue.d400, - textTransform: "uppercase", - marginLeft: 5 - } -}) - -const Link = styled("a", { - base: { - fontSize: theme.font.size["base"], - fontWeight: theme.font.weight.regular, - color: theme.color.gray.d900, - textDecoration: "underline", - textUnderlineOffset: 2 - } -}) - -const Divider = styled("div", { - base: { - display: "flex", - whiteSpace: "nowrap", - textAlign: "center", - ":before": { - width: "100%", - content: "", - borderTop: `1px solid ${theme.color.gray.d500}`, - alignSelf: "center" - }, - ":after": { - width: "100%", - content: "", - borderTop: `1px solid ${theme.color.gray.d500}`, - alignSelf: "center" - } - } -}) - -const DividerText = styled("span", { - base: { - margin: "0px 10px", - fontSize: theme.font.size["xs"], - color: theme.color.gray.d900, - lineHeight: "20px", - textOverflow: "ellipsis" - } -}) - -export function NewProfile() { - const nav = useNavigate(); - const account = useAccount(); - - const openPopup = () => { - const BASE_URL = import.meta.env.VITE_API_URL; - - const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( - navigator.userAgent - ); - - const createDesktopWindow = (authUrl: string) => { - const config = { - width: 700, - height: 700, - features: "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=no" - }; - - const top = window.top!.outerHeight / 2 + window.top!.screenY - (config.height / 2); - const left = window.top!.outerWidth / 2 + window.top!.screenX - (config.width / 2); - - return window.open( - authUrl, - 'Steam Popup', - `width=${config.width},height=${config.height},left=${left},top=${top},${config.features}` - ); - }; - - const monitorAuthWindow = ( - targetWindow: Window, - { timeoutMs = 3 * 60 * 1000, pollInterval = 250 } = {} - ) => { - return new Promise((resolve, reject) => { - const timeout = setTimeout(async() => { - await cleanup(); - reject(new Error("Authentication timed out")); - }, timeoutMs); - - const poll = setInterval(async () => { - if (targetWindow.closed) { - await cleanup(); - resolve(); // Auth window closed by user - } - }, pollInterval); - - async function cleanup() { - clearTimeout(timeout); - clearInterval(poll); - if (!targetWindow.closed) { - try { - targetWindow.location.href = "about:blank"; - targetWindow.close(); - } catch { - // Ignore cross-origin issues - } - } - await account.refresh(account.current.id) - nav("/profiles") - window.focus(); - } - }); - }; - - - const authUrl = `${BASE_URL}/steam/popup/${account.current.id}`; - const newWindow = isMobile ? window.open(authUrl, '_blank') : createDesktopWindow(authUrl); - - if (!newWindow) { - throw new Error('Failed to open authentication window'); - } - - return monitorAuthWindow(newWindow); - } - - return ( - - - - - Connect your game library to get started - - - - Or link - - - - - -
- Help I can't connect my account -
-
-
-
- - - - - - - - - - - - - -
- ) -} \ No newline at end of file diff --git a/packages/www/src/pages/not-found.tsx b/packages/www/src/pages/not-found.tsx deleted file mode 100644 index df6f0092..00000000 --- a/packages/www/src/pages/not-found.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { Show } from "solid-js"; -import { A } from "@solidjs/router"; -import { Text } from "@nestri/www/ui/text"; -import { styled } from "@macaron-css/solid"; -import { theme } from "@nestri/www/ui/theme"; -import { Header } from "@nestri/www/pages/steam/header"; -import { Screen as FullScreen, Container } from "@nestri/www/ui/layout"; - -const NotAllowedDesc = styled("div", { - base: { - fontSize: theme.font.size.base, - color: theme.color.gray.d900, - }, -}); - -const HomeLink = styled(A, { - base: { - fontSize: theme.font.size.base, - textUnderlineOffset: 1, - color: theme.color.blue.d900 - }, -}); - -interface ErrorScreenProps { - inset?: "none" | "header"; - message?: string; - header?: boolean; -} - -export function NotFound(props: ErrorScreenProps) { - return ( - <> - -
- - - - {props.message || "Page not found"} - Go back home - - - - ); - } - -export function NotAllowed(props: ErrorScreenProps) { - return ( - <> - -
- - - - Access not allowed - - You don't have access to this page,  - go back home. - - - Public profiles are coming soon - - - - - ); -} \ No newline at end of file diff --git a/packages/www/src/pages/profiles.tsx b/packages/www/src/pages/profiles.tsx deleted file mode 100644 index b9cd34fe..00000000 --- a/packages/www/src/pages/profiles.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import { For } from "solid-js"; -import { A } from "@solidjs/router"; -import { styled } from "@macaron-css/solid"; -import { keyframes } from "@macaron-css/core"; -import { useAccount } from "../providers/account"; -import SteamAvatar from "../components/profile-picture"; -import { Container, Screen as FullScreen, theme } from "@nestri/www/ui"; - -const Background = styled("div", { - base: { - position: "fixed", - zIndex: "-1", - inset: 0, - ":after": { - inset: 0, - content: "", - userSelect: "none", - position: "absolute", - pointerEvents: "none", - background: `linear-gradient(0deg,${theme.color.background.d200} 30%,transparent),linear-gradient(0deg,${theme.color.background.d200} 30%,transparent)` - } - } -}) - -const gradient = keyframes({ - "0%": { - backgroundPosition: "0% 50%", - }, - "50%": { - backgroundPosition: "100% 50%", - }, - "100%": { - backgroundPosition: "0% 50%", - }, -}) - -const BackgroundImage = styled("div", { - base: { - width: "100%", - height: "70%", - position: "relative", - filter: "saturate(120%)", - backgroundSize: "300% 100%", - backgroundPosition: "0% 0%", - backgroundRepeat: "repeat-x", - animation: `${gradient} 35s linear 0s infinite`, - backgroundImage: "linear-gradient(120deg, rgb(232,23,98) 1.26%, rgb(30,134,248) 18.6%, rgb(91,108,255) 34.56%, rgb(52,199,89) 49.76%, rgb(245,197,5) 64.87%, rgb(236,62,62) 85.7%)", - } -}) - -const Wrapper = styled("div", { - base: { - margin: "100px 0", - textAlign: "center", - justifyContent: "center", - display: "flex", - flexDirection: "column", - width: "100%", - maxWidth: 700, - } -}) - -const Title = styled("h1", { - base: { - fontSize: "50px", - fontFamily: theme.font.family.heading, - letterSpacing: "-0.515px", - - } -}) - -const Profiles = styled("div", { - base: { - // width: "100%", - gridTemplateColumns: "repeat(auto-fit, minmax(150px, auto))", - display: "grid", - columnGap: 12, - rowGap: 10, - margin: "100px 0", - alignItems: "center", - justifyContent: "center" - } -}) - -const Profile = styled("div", { - base: { - width: 150, - } -}) - -const ProfilePicture = styled("div", { - base: { - width: 150, - height: 150, - cursor: "pointer", - borderRadius: 75, - overflow: "hidden", - border: `6px solid ${theme.color.gray.d700}`, - transition: "all 200ms ease", - ":hover": { - transform: "scale(1.07)", - borderColor: theme.color.blue.d700 - } - } -}) - -const ProfileName = styled("div", { - base: { - margin: "20px 0", - lineHeight: "1.25em", - color: theme.color.gray.d900, - transition: "all 300ms ease", - overflow: "hidden", - textOverflow: "ellipsis", - whiteSpace: "nowrap", - fontSize: theme.font.size.lg - } -}) - -const NewButton = styled(A, { - base: { - display: "flex", - justifyContent: "center", - textDecoration: "none", - alignItems: "center", - cursor: "pointer", - color: "inherit", - padding: "0px 14px", - gap: 10, - width: "max-content", - alignSelf: "center", - height: 48, - borderRadius: theme.space["3"], - transition: "all .2s ease", - border: `1px solid ${theme.color.gray.d400}`, - backgroundColor: theme.color.background.d100, - ":hover": { - transform: "scale(1.02)", - borderColor: theme.color.blue.d700 - } - } -}) - -export function ProfilesRoute() { - const account = useAccount() - return ( - - - - - - - - Who's playing? - - - - {(profile) => ( - - - - - {profile.name} - - )} - - - - - Add Steam account - - - - - ) -} \ No newline at end of file diff --git a/packages/www/src/pages/steam/header.tsx b/packages/www/src/pages/steam/header.tsx deleted file mode 100644 index fbb9593f..00000000 --- a/packages/www/src/pages/steam/header.tsx +++ /dev/null @@ -1,377 +0,0 @@ -import { animate, scroll } from "motion" -import { A, useLocation } from "@solidjs/router"; -import { Container } from "@nestri/www/ui"; -import Avatar from "@nestri/www/ui/avatar"; -import { styled } from "@macaron-css/solid"; -import { theme } from "@nestri/www/ui/theme"; -import { useAccount } from "@nestri/www/providers/account"; -import { TeamContext } from "@nestri/www/providers/context"; -import { createEffect, createSignal, Match, onCleanup, ParentProps, Show, Switch, useContext } from "solid-js"; - -const PageWrapper = styled("div", { - base: { - minHeight: "100dvh", - backgroundColor: theme.color.background.d200 - } -}) - -const NestriLogo = styled("svg", { - base: { - height: 28, - width: 28, - } -}) - -const NestriLogoBig = styled("svg", { - base: { - height: 38, - width: 38, - } -}) - -const LineSvg = styled("svg", { - base: { - width: 26, - height: 26, - color: theme.color.grayAlpha.d300 - } -}) - -const LogoName = styled("svg", { - base: { - height: 18, - color: theme.color.d1000.grayAlpha - } -}) - -const Link = styled(A, { - base: { - display: "flex", - alignItems: "center", - justifyContent: "center", - gap: 2 - } -}) - -const TeamRoot = styled("div", { - base: { - height: 32, - display: "flex", - alignItems: "center", - justifyContent: "center", - gap: 8 - } -}) - -const LogoRoot = styled("div", { - base: { - display: "flex", - alignItems: "center", - justifyContent: "center", - flexShrink: 0, - } -}) - -const TeamLabel = styled("span", { - base: { - letterSpacing: -0.5, - fontSize: theme.font.size.base, - fontFamily: theme.font.family.heading, - fontWeight: theme.font.weight.semibold, - color: theme.color.gray.d900 - } -}) - -const Badge = styled("div", { - base: { - height: 20, - fontSize: 11, - lineHeight: 1, - color: "#FFF", - padding: "0 6px", - letterSpacing: 0.2, - borderRadius: 9999, - alignItems: "center", - display: "inline-flex", - whiteSpace: "pre-wrap", - justifyContent: "center", - fontFeatureSettings: `"tnum"`, - fontVariantNumeric: "tabular-nums", - } -}) - -const DropIcon = styled("svg", { - base: { - height: 14, - width: 14, - marginLeft: -4, - color: theme.color.grayAlpha.d800 - } -}) - -const AvatarImg = styled("img", { - base: { - height: 32, - width: 32, - borderRadius: 9999 - } -}) - -const RightRoot = styled("div", { - base: { - marginLeft: "auto", - display: "flex", - gap: theme.space["4"], - alignItems: "center", - justifyContent: "center", - } -}) - -const NavRoot = styled("div", { - base: { - display: "flex", - height: "100%", - alignItems: "center", - justifyContent: "center", - gap: theme.space["4"], - } -}) - -const NavLink = styled(A, { - base: { - color: theme.color.d1000.gray, - textDecoration: "none", - height: 32, - padding: "0 8px", - display: "flex", - justifyContent: "center", - alignItems: "center", - borderRadius: 8, - gap: theme.space["2"], - lineHeight: 1.5, - fontSize: theme.font.size.sm, - fontWeight: theme.font.weight.regular, - transition: "all 0.3s cubic-bezier(0.4,0,0.2,1)", - // ":hover": { - // color: theme.color.d1000.gray - // } - } -}) - -const NavWrapper = styled("div", { - base: { - zIndex: 100, - position: "fixed", - height: theme.headerHeight.root, - transition: "all 0.3s cubic-bezier(0.4,0,0.2,1)", - width: "100%", - }, - variants: { - scrolled: { - true: { - backgroundColor: theme.color.background.d200, - boxShadow: `0 2px 20px 1px ${theme.color.gray.d300}` - } - } - } -}) - -const Background = styled("div", { - base: { - background: theme.color.headerGradient, - zIndex: 1, - height: 180, - width: "100%", - position: "fixed", - pointerEvents: "none" - } -}) - -const Nav = styled("nav", { - base: { - position: "relative", - padding: "0.75rem 1rem", - zIndex: 200, - width: "100%", - gap: "1.5rem", - display: "flex", - justifyContent: "space-between", - alignItems: "center" - } -}) - -const capitalize = (name: string) => { - return name - .charAt(0) // first character - .toUpperCase() // make it uppercase - + name - .slice(1) // rest of the string - .toLowerCase(); -} - -/** - * Displays the application's fixed top navigation bar with branding, team information, and navigation links. - * - * The header includes the app logo, team avatar and name, a badge indicating the team's plan type, and navigation links related to the team. The header's appearance updates dynamically based on the user's scroll position. - * - * @param props.children - Optional elements rendered below the header. - * @returns The rendered header component. - */ -export function Header(props: ParentProps) { - // const team = useContext(TeamContext) - const [hasScrolled, setHasScrolled] = createSignal(false) - const [team,] = createSignal({ - id: "tea_01JPACSPYWTTJ66F32X3AWWFWE", - slug: "wanjohiryan", - name: "Wanjohi", - planType: "Pro" - }) - - createEffect(() => { - const handleScroll = () => { setHasScrolled(window.scrollY > 0); } - - document.addEventListener("scroll", handleScroll); - - onCleanup(() => { - document.removeEventListener("scroll", handleScroll); - }); - - }) - - // const account = useAccount() - const location = useLocation() - - return ( - - - - - {props.children} - - ) -} \ No newline at end of file diff --git a/packages/www/src/pages/steam/home-old.tsx b/packages/www/src/pages/steam/home-old.tsx deleted file mode 100644 index f92d5ce3..00000000 --- a/packages/www/src/pages/steam/home-old.tsx +++ /dev/null @@ -1,524 +0,0 @@ -import { FullScreen, theme } from "@nestri/www/ui"; -import { styled } from "@macaron-css/solid"; -import { Header } from "@nestri/www/pages/steam/header"; -import { Modal } from "@nestri/www/ui/modal"; -import { createEffect, createSignal, Match, onCleanup, Switch } from "solid-js"; -import { Text } from "@nestri/www/ui/text" -import { globalStyle, keyframes } from "@macaron-css/core"; -import { A } from "@solidjs/router"; -import Avatar from "@nestri/www/ui/avatar"; -import { Portal } from "@nestri/www/common/portal"; -import { QrCodeComponent } from "@nestri/www/components" - - -const LastPlayedWrapper = styled("div", { - base: { - position: "relative", - width: "100%", - justifyContent: "center", - minHeight: 700, - height: "50vw", - maxHeight: 800, - WebkitBoxPack: "center", - display: "flex", - flexDirection: "column", - ":after": { - content: "", - pointerEvents: "none", - userSelect: "none", - background: `linear-gradient(to bottom,transparent,${theme.color.background.d200})`, - width: "100%", - left: 0, - position: "absolute", - bottom: -1, - zIndex: 3, - height: 320, - backdropFilter: "blur(2px)", - WebkitBackdropFilter: "blur(1px)", - WebkitMaskImage: `linear-gradient(to top,${theme.color.background.d200} 25%,transparent)`, - maskImage: `linear-gradient(to top,${theme.color.background.d200} 25%,transparent)` - } - } -}) - -const LastPlayedFader = styled("div", { - base: { - position: "absolute", - width: "100%", - height: "3rem", - backgroundColor: "rgba(0,0,0,.08)", - mixBlendMode: "multiply", - backdropFilter: "saturate(160%) blur(60px)", - WebkitBackdropFilter: "saturate(160%) blur(60px)", - maskImage: "linear-gradient(to top,rgba(0,0,0,.15) 0%,rgba(0,0,0,.65) 57.14%,rgba(0,0,0,.9) 67.86%,#000 79.08%)", - // background: "linear-gradient(rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 50%, rgba(10, 0, 0, 0.15) 65%, rgba(0, 0, 0, 0.075) 75.5%, rgba(0, 0, 0, 0.035) 82.85%, rgba(0, 0, 0, 0.02) 88%, rgba(0, 0, 0, 0) 100%)", - opacity: 0.6, - // backdropFilter: "blur(16px)", - pointerEvents: "none", - zIndex: 1, - top: 0, - left: 0, - } -}) - -const BackgroundImage = styled("div", { - base: { - position: "fixed", - inset: 0, - backgroundColor: theme.color.background.d200, - backgroundSize: "cover", - zIndex: 0, - transitionDuration: "0.2s", - transitionTimingFunction: "cubic-bezier(0.4,0,0.2,1)", - transitionProperty: "opacity", - backgroundImage: "url(https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/1203190/ss_97ea9b0b5a6adf3436b31d389cd18d3a647ee4bf.jpg)" - // backgroundImage: "url(https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/3373660/c4993923f605b608939536b5f2521913850b028a/ss_c4993923f605b608939536b5f2521913850b028a.jpg)" - } -}) - -const LogoBackgroundImage = styled("div", { - base: { - position: "fixed", - top: "2rem", - height: 240, - // width: 320, - aspectRatio: "16 / 9", - left: "50%", - transform: "translate(-50%,0%)", - backgroundSize: "cover", - zIndex: 1, - transitionDuration: "0.2s", - transitionTimingFunction: "cubic-bezier(0.4,0,0.2,1)", - transitionProperty: "opacity", - backgroundImage: "url(https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/1203190/logo_2x.png)" - } -}) - -const Material = styled("div", { - base: { - backdropFilter: "saturate(160%) blur(60px)", - WebkitBackdropFilter: "saturate(160%) blur(60px)", - backgroundSize: "cover", - backgroundRepeat: "no-repeat", - position: "absolute", - borderRadius: 6, - left: 0, - top: 0, - height: "100%", - width: "100%", - maskImage: "linear-gradient(180deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 40.82%,rgba(0,0,0,.15) 50%,rgba(0,0,0,.65) 57.14%,rgba(0,0,0,.9) 67.86%,#000 79.08%)", - WebkitMaskImage: "linear-gradient(180deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 40.82%,rgba(0,0,0,.15) 50%,rgba(0,0,0,.65) 57.14%,rgba(0,0,0,.9) 67.86%,#000 79.08%)" - } -}) - -const JoeColor = styled("div", { - base: { - backgroundColor: "rgba(0,0,0,.08)", - mixBlendMode: "multiply", - position: "absolute", - borderRadius: 6, - left: 0, - top: 0, - height: "100%", - width: "100%", - maskImage: "linear-gradient(180deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 40.82%,rgba(0,0,0,.15) 50%,rgba(0,0,0,.65) 57.14%,rgba(0,0,0,.9) 67.86%,#000 79.08%)", - WebkitMaskImage: "linear-gradient(180deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 40.82%,rgba(0,0,0,.15) 50%,rgba(0,0,0,.65) 57.14%,rgba(0,0,0,.9) 67.86%,#000 79.08%)" - } -}) - -const GamesContainer = styled("div", { - base: { - width: "100%", - display: "flex", - alignItems: "center", - flexDirection: "column", - zIndex: 10, - isolation: "isolate", - backgroundColor: theme.color.background.d200, - } -}) - -const GamesWrapper = styled("div", { - base: { - maxWidth: "70vw", - width: "100%", - gridTemplateColumns: "repeat(4, minmax(0, 1fr))", - margin: "0 auto", - display: "grid", - marginTop: -80, - columnGap: 12, - rowGap: 10 - } -}) - -const GameImage = styled("img", { - base: { - width: "100%", - height: "100%", - aspectRatio: "460/215", - borderRadius: 10, - } -}) - -const GameSquareImage = styled("img", { - base: { - width: "100%", - height: "100%", - aspectRatio: "1/1", - borderRadius: 10, - transitionDuration: "0.2s", - transitionTimingFunction: "cubic-bezier(0.4,0,0.2,1)", - transitionProperty: "all", - cursor: "pointer", - border: `2px solid transparent`, - ":hover": { - transform: "scale(1.05)", - outline: `2px solid ${theme.color.brand}` - } - } -}) - -const GameImageCapsule = styled("img", { - base: { - width: "100%", - height: "100%", - aspectRatio: "374/448", - borderRadius: 10, - } -}) - -const SteamLibrary = styled("div", { - base: { - borderTop: `1px solid ${theme.color.gray.d400}`, - padding: "20px 0", - margin: "20px auto", - width: "100%", - display: "grid", - // backgroundColor: "red", - maxWidth: "70vw", - gridTemplateColumns: "repeat(2, minmax(0, 1fr))", - columnGap: 20, - rowGap: 10, - } -}) - -const Title = styled("h3", { - base: { - textAlign: "left", - fontFamily: theme.font.family.heading, - fontWeight: theme.font.weight.medium, - fontSize: theme.font.size["2xl"], - letterSpacing: -0.7, - gridColumn: "1/-1", - marginBottom: 20, - } -}) - -const SteamGameTitle = styled("h3", { - base: { - textAlign: "left", - fontFamily: theme.font.family.heading, - fontWeight: theme.font.weight.medium, - fontSize: theme.font.size["xl"], - letterSpacing: -0.7, - } -}) - -const SteamGameSubTitle = styled("span", { - base: { - textAlign: "left", - fontWeight: theme.font.weight.regular, - color: theme.color.gray.d900, - fontSize: theme.font.size["base"], - letterSpacing: -0.4, - } -}) - -const SubTitle = styled("span", { - base: { - textAlign: "left", - fontWeight: theme.font.weight.regular, - color: theme.color.gray.d900, - fontSize: theme.font.size["base"], - letterSpacing: -0.4, - gridColumn: "1/-1", - marginTop: -20, - marginBottom: 20, - } -}) - -const FriendsList = styled("div", { - base: { - borderTop: `1px solid ${theme.color.gray.d400}`, - padding: "20px 0", - margin: "20px auto", - width: "100%", - display: "grid", - maxWidth: "70vw", - gridTemplateColumns: "repeat(5, minmax(0, 1fr))", - columnGap: 12, - rowGap: 10, - } -}) - -const FriendContainer = styled("div", { - base: { - width: "100%", - display: "flex", - minHeight: "calc(100% + 20px)", - aspectRatio: "300/380", - borderRadius: 15, - position: "relative", - padding: "35px 17px", - border: `1px solid ${theme.color.gray.d500}`, - backgroundColor: theme.color.background.d100, - flexDirection: "column", - alignItems: "center", - } -}) - -const FriendsSubText = styled("span", { - base: { - color: theme.color.gray.d900, - fontSize: theme.font.size.sm, - marginTop: 10, - } -}) -const FriendsText = styled("h3", { - base: { - fontSize: theme.font.size["lg"], - fontFamily: theme.font.family.heading, - marginTop: 20, - } -}) - -const FriendsInviteButton = styled("button", { - base: { - minWidth: 48, - borderRadius: 9999, - textAlign: "center", - padding: "0px 24px", - fontSize: theme.font.size["base"], - lineHeight: "1.75", - marginTop: 20, - cursor: "pointer", - fontWeight: theme.font.weight.bold, - fontFamily: theme.font.family.heading, - border: `1px solid ${theme.color.gray.d100}`, - backgroundColor: theme.color.blue.d700, - transition: "all 0.2s cubic-bezier(0.4,0,0.2,1)", - ":hover": { - transform: "scale(1.05)" - } - } -}) - -const SteamGameContainer = styled("div", { - base: { - padding: "20px 0", - width: "100%", - minHeight: 72, - display: "flex", - flexDirection: "row", - selectors: { - "&:not(:last-of-type)": { - borderBottom: `1px solid ${theme.color.gray.d400}` - }, - "&:not(:first-of-type)": { - borderTop: `1px solid ${theme.color.gray.d400}` - } - } - } -}) - -const SteamGameImg = styled("img", { - base: { - border: "none", - outline: "none", - aspectRatio: "1/1", - height: 80, - borderRadius: 8 - } -}) - -const SteamGameText = styled("div", { - base: { - paddingRight: "3em", - marginLeft: 30, - display: "flex", - gap: 8, - flexDirection: "column", - alignSelf: "center", - } -}) -const SteamGameBtn = styled("button", { - base: { - minWidth: 48, - borderRadius: 9999, - textAlign: "center", - padding: "0px 24px", - fontSize: theme.font.size["base"], - lineHeight: "1.75", - // marginTop: 20, - // marginRight: 1, - margin: "0 1px 0 auto", - cursor: "pointer", - alignSelf: "center", - fontWeight: theme.font.weight.bold, - fontFamily: theme.font.family.heading, - color: theme.color.blue.d900, - border: `1px solid ${theme.color.gray.d100}`, - backgroundColor: theme.color.blue.d300, - transition: "all 0.2s cubic-bezier(0.4,0,0.2,1)", - ":hover": { - transform: "scale(1.05)" - } - } -}) - -const PortalContainer = styled("div", { - base: { - zIndex: 4, - isolation: "isolate", - position: "fixed", - bottom: "20vh", - left: "50%", - transform: "translateX(-50%)" - } -}) - -/** - * Renders the home page layout for the gaming platform. - * - * This component wraps its content within a header and a full-screen container, - * currently displaying a QR code component. Commented sections indicate planned - * enhancements such as game previews, team mate suggestions, and a Steam library. - */ -export function HomeRoute() { - - return ( - <> -
- - {/* - - - - - - - - - - */} - - - - - - - - - Team Mate Suggestions - Invite people to join your team and play together - - - Wanjohi Ryan - From your Steam Friends - Invite - - - - Tracy Jones - From your Steam Friends - Invite - - - - The65th - From your Steam Friends - Invite - - - - Menstral - From your Steam Friends - Invite - - - - AstroHot - From your Steam Friends - Invite - - - - Your Steam library - These titles from your Steam Library are fully functional on Nestri -
- - - - Alan Wake II - Action, Adventure, Horror - - Install - - - - - Slime Rancher 2 - Action, Adventure, Casual, Indie - - Install - - - - - Doom Eternal - Action - - Install - -
-
- - - - Dead Space - Action, Adventure - - Update - - - - - Hi-Fi Rush - Action - - Install - - - - - Baldur's Gate 3 - Adventure, RPG, Strategy - - Install - -
-
-
-
-
- - ) -} - -/* - - - - -*/ - diff --git a/packages/www/src/pages/steam/index.tsx b/packages/www/src/pages/steam/index.tsx deleted file mode 100644 index 85e8bfb3..00000000 --- a/packages/www/src/pages/steam/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { LibraryRoute } from "./library"; -import { useOpenAuth } from "@openauthjs/solid"; -import { Route, useParams } from "@solidjs/router"; -import { ApiProvider } from "@nestri/www/providers/api"; -import { SteamContext } from "@nestri/www/providers/context"; -import { createEffect, createMemo, Match, Switch } from "solid-js"; -import { NotAllowed, NotFound } from "@nestri/www/pages/not-found"; -import { useAccount, useStorage } from "@nestri/www/providers/account"; - -export const SteamRoute = ( - { - // const params = useParams(); - // const account = useAccount(); - // const storage = useStorage(); - // const openauth = useOpenAuth(); - - // const team = createMemo(() => - // account.current.teams.find( - // (item) => item.id === params.steamID, - // ), - // ); - - // createEffect(() => { - // const t = team(); - // if (!t) return; - // storage.set("steam", t.id); - // }); - - // createEffect(() => { - // const steamID = params.steamID; - // for (const item of Object.values(account.all)) { - // for (const profile of item.profiles) { - // if (profile.id === steamID && item.id !== openauth.subject!.id) { - // openauth.switch(item.id); - // } - // } - // } - // }) - - // return ( - // - // - // {/* TODO: Add a public page for (other) teams */} - // - // - // - // team()!}> - // - // {props.children} - // - // - // - // - // ) - // }} - > - - } /> - -) \ No newline at end of file diff --git a/packages/www/src/pages/steam/library.tsx b/packages/www/src/pages/steam/library.tsx deleted file mode 100644 index 589abe51..00000000 --- a/packages/www/src/pages/steam/library.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import { For } from "solid-js"; -import { styled } from "@macaron-css/solid"; -import { FullScreen, theme } from "@nestri/www/ui"; -import { Header } from "@nestri/www/pages/steam/header"; - -const Container = styled("div", { - base: { - width: "100%", - display: "flex", - alignItems: "center", - flexDirection: "column", - zIndex: 10, - isolation: "isolate", - marginTop: 30, - } -}) - -const Wrapper = styled("div", { - base: { - maxWidth: "70vw", - width: "100%", - gridTemplateColumns: "repeat(4, minmax(0, 1fr))", - margin: "0 auto", - display: "grid", - columnGap: 12, - rowGap: 10 - } -}) - - -const SquareImage = styled("img", { - base: { - width: "100%", - height: "100%", - userSelect: "none", - aspectRatio: "1/1", - borderRadius: 10, - transitionDuration: "0.4s", - transitionTimingFunction: "cubic-bezier(0.4,0,0.2,1)", - transitionProperty: "opacity", - cursor: "pointer", - border: `3px solid transparent`, - ":hover": { - // transform: "scale(1.01)", - outline: `3px solid ${theme.color.brand}` - } - } -}) - -const TitleHeader = styled("header", { - base: { - borderBottom: `1px solid ${theme.color.gray.d400}`, - color: theme.color.d1000.gray - } -}) - -const TitleWrapper = styled("div", { - base: { - width: "calc(1000px + calc(2 * 24px))", - paddingLeft: "24px", - display: "flex", - justifyContent: "flex-start", - alignItems: "center", - paddingRight: "24px", - marginLeft: "auto", - marginRight: "auto", - maxWidth: "100%" - } -}) - -const TitleContainer = styled("div", { - base: { - margin: "40px 0", - display: "flex", - flexDirection: "column", - gap: 16, - width: "100%", - minWidth: 0 - } -}) - -const Title = styled("h1", { - base: { - lineHeight: "2.5rem", - fontWeight: theme.font.weight.semibold, - letterSpacing: "-0.069375rem", - textAlign: "left", - fontSize: theme.font.size["4xl"], - textTransform: "capitalize" - } -}) - -const Description = styled("p", { - base: { - fontSize: theme.font.size.sm, - lineHeight: "1.25rem", - textAlign: "left", - fontWeight: theme.font.weight.regular, - letterSpacing: "initial", - color: theme.color.gray.d900 - } -}) - -const LogoFooter = styled("section", { - base: { - position: "relative", - bottom: -1, - fontSize: "100%", - maxWidth: 1440, - width: "100%", - pointerEvents: "none", - display: "flex", - margin: "-80px 0", - alignItems: "center", - justifyContent: "center", - padding: "0 8px", - overflow: "hidden", - }, -}) - -const Logo = styled("svg", { - base: { - width: "100%", - height: "100%", - transform: "translateY(40%)", - opacity: "70%", - } -}) -//MaRt@6563 -export function LibraryRoute() { - - return ( -
- - - - - - Your Steam Library - - - Install games directly from your Steam account to your Nestri Machine - - - - - - - - {(item, index) => ( - - )} - - - - - - - - - - - - - - - - - -
- ) -} \ No newline at end of file diff --git a/packages/www/src/providers/account.tsx b/packages/www/src/providers/account.tsx deleted file mode 100644 index 01f999c3..00000000 --- a/packages/www/src/providers/account.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { createStore, reconcile } from "solid-js/store"; -import { makePersisted } from "@solid-primitives/storage"; -import { ParentProps, createContext, useContext } from "solid-js"; - -type Context = ReturnType; -const context = createContext(); - -function init() { - const [store, setStore] = makePersisted( - createStore({ - account: "", - steam: "", - }) - ); - - return { - value: store, - set: setStore, - }; -} - -export function StorageProvider(props: ParentProps) { - const ctx = init(); - return {props.children}; -} - -export function useStorage() { - const ctx = useContext(context); - if (!ctx) { - throw new Error("No storage context"); - } - return ctx; -} - -import { createEffect } from "solid-js"; -import { useOpenAuth } from "@openauthjs/solid"; -import { Account } from "@nestri/core/account/index"; -import { createInitializedContext } from "../common/context"; - -type Storage = { - accounts: Record -} - -export const { use: useAccount, provider: AccountProvider } = createInitializedContext("AccountContext", () => { - const auth = useOpenAuth() - const [store, setStore] = makePersisted( - createStore({ - accounts: {}, - }), - { - name: "nestri.account", - }, - ); - - async function refresh(id: string) { - const access = await auth.access(id).catch(() => { }) - if (!access) { - auth.authorize() - return - } - return await fetch(import.meta.env.VITE_API_URL + "/account", { - headers: { - authorization: `Bearer ${access}`, - }, - }) - .then(val => val.json()) - .then(val => setStore("accounts", id, reconcile(val.data))) - } - - createEffect((previous: string[]) => { - if (!Object.values(auth.all).length) { - auth.authorize() - return [] - } - for (const item of Object.values(auth.all)) { - if (previous.includes(item.id)) continue - refresh(item.id) - } - return Object.keys(auth.all) - }, [] as string[]) - - return { - get all() { - return store.accounts - }, - get current() { - return store.accounts[auth.subject!.id] - }, - refresh, - get ready() { - if (!auth.subject) return false - return store.accounts[auth.subject.id] !== undefined - } - } -}) \ No newline at end of file diff --git a/packages/www/src/providers/api.tsx b/packages/www/src/providers/api.tsx deleted file mode 100644 index a122c70d..00000000 --- a/packages/www/src/providers/api.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { hc } from "hono/client"; -import { useSteam } from "./context"; -import { useOpenAuth } from "@openauthjs/solid"; -import { type app } from "@nestri/functions/api/index"; -import { createInitializedContext } from "@nestri/www/common/context"; - - -export const { use: useApi, provider: ApiProvider } = createInitializedContext( - "ApiContext", - () => { - const steam = useSteam(); - const auth = useOpenAuth(); - - const client = hc(import.meta.env.VITE_API_URL, { - async fetch(...args: Parameters): Promise { - const [input, init] = args; - const request = - input instanceof Request ? input : new Request(input, init); - const headers = new Headers(request.headers); - headers.set("authorization", `Bearer ${await auth.access()}`); - headers.set("x-nestri-steam", steam().id); - - return fetch( - new Request(request, { - ...init, - headers, - }), - ); - }, - }); - return { - client, - ready: true, - }; - }, -); \ No newline at end of file diff --git a/packages/www/src/providers/context.tsx b/packages/www/src/providers/context.tsx deleted file mode 100644 index 4c407019..00000000 --- a/packages/www/src/providers/context.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Steam } from "@nestri/core/steam/index"; -import { Accessor, createContext, useContext } from "solid-js"; - -export const SteamContext = createContext>(); - -export function useSteam() { - const context = useContext(SteamContext); - if (!context) throw new Error("No steam context"); - return context; -} \ No newline at end of file diff --git a/packages/www/src/providers/zero.tsx b/packages/www/src/providers/zero.tsx deleted file mode 100644 index 28c733c6..00000000 --- a/packages/www/src/providers/zero.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Zero } from "@rocicorp/zero" -import { schema } from "@nestri/zero/schema" -import { useOpenAuth } from "@openauthjs/solid" -import { useAccount } from "@nestri/www/providers/account" -import { createInitializedContext } from "@nestri/www/common/context" - -export const { use: useZero, provider: ZeroProvider } = - createInitializedContext("ZeroContext", () => { - const account = useAccount() - const auth = useOpenAuth() - const zero = new Zero({ - schema, - auth: () => auth.access(), - userID: account.current.id, - server: import.meta.env.VITE_ZERO_URL, - }) - - return { - mutate: zero.mutate, - query: zero.query, - client: zero, - ready: true, - }; - }); \ No newline at end of file diff --git a/packages/www/src/sst-env.d.ts b/packages/www/src/sst-env.d.ts deleted file mode 100644 index 884d4914..00000000 --- a/packages/www/src/sst-env.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/// -interface ImportMetaEnv { - readonly VITE_API_URL: string - readonly VITE_STAGE: string - readonly VITE_AUTH_URL: string - readonly VITE_ZERO_URL: string -} -interface ImportMeta { - readonly env: ImportMetaEnv -} \ No newline at end of file diff --git a/packages/www/src/ui/avatar.tsx b/packages/www/src/ui/avatar.tsx deleted file mode 100644 index 3b1e960c..00000000 --- a/packages/www/src/ui/avatar.tsx +++ /dev/null @@ -1,97 +0,0 @@ -const DEFAULT_COLORS = ['#6A5ACD', '#E63525', '#20B2AA', '#E87D58']; - -const getModulo = (value: number, divisor: number, useEvenCheck?: number) => { - const remainder = value % divisor; - if (useEvenCheck && Math.floor(value / Math.pow(10, useEvenCheck) % 10) % 2 === 0) { - return -remainder; - } - return remainder; -}; - -const generateColors = (name: string, colors = DEFAULT_COLORS) => { - const hashCode = name.split('').reduce((acc, char) => { - acc = ((acc << 5) - acc) + char.charCodeAt(0); - return acc & acc; - }, 0); - - const hash = Math.abs(hashCode); - const numColors = colors.length; - - return Array.from({ length: 3 }, (_, index) => ({ - color: colors[(hash + index) % numColors], - translateX: getModulo(hash * (index + 1), 4, 1), - translateY: getModulo(hash * (index + 1), 4, 2), - scale: 1.2 + getModulo(hash * (index + 1), 2) / 10, - rotate: getModulo(hash * (index + 1), 360, 1) - })); -}; -type Props = { - name: string; - size?: number; - class?: string; - colors?: string[] -} - -export default function Avatar({ class: className, name, size = 80, colors = DEFAULT_COLORS }: Props) { - const colorData = generateColors(name, colors); - - const blurValue = Math.max(1, Math.min(7, size / 10)); - - return ( - - {`Fallback avatar for ${name}`} - - - - - - - - - - - - - - - - - ) -} \ No newline at end of file diff --git a/packages/www/src/ui/button.ts b/packages/www/src/ui/button.ts deleted file mode 100644 index ff448133..00000000 --- a/packages/www/src/ui/button.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { theme } from "./theme"; -import { styled } from "@macaron-css/solid"; - -export const Button = styled("button", { - base: { - borderRadius: 6, - border: "1px solid transparent", - padding: `${theme.space[2]} ${theme.space[4]}`, - fontWeight: 500, - letterSpacing: 0.1, - lineHeight: "normal", - fontFamily: theme.font.family.heading, - textAlign: "center", - cursor: "pointer", - transitionDelay: "0s, 0s", - transitionDuration: "0.2s, 0.2s", - transitionProperty: "background-color, border", - transitionTimingFunction: "ease-out, ease-out", - display: "inline-flex", - gap: theme.space[1.5], - alignItems: "center", - justifyContent: "center", - ":disabled": { - pointerEvents: "none", - }, - }, - variants: { - color: { - brand: { - backgroundColor: theme.color.brand, - color: "#FFF", - } - } - } -}) \ No newline at end of file diff --git a/packages/www/src/ui/form.tsx b/packages/www/src/ui/form.tsx deleted file mode 100644 index 6e89ea66..00000000 --- a/packages/www/src/ui/form.tsx +++ /dev/null @@ -1,318 +0,0 @@ -import { theme } from "./theme"; -import { utility } from "./utility"; -import { Container } from "./layout"; -import { styled } from "@macaron-css/solid" -import { CSSProperties } from "@macaron-css/core"; -import { ComponentProps, For, JSX, Show, splitProps } from "solid-js"; - -// FIXME: Make sure the focus ring goes to red when the input is invalid - -export const inputStyles: CSSProperties = { - lineHeight: theme.font.lineHeight, - appearance: "none", - width: "100%", - fontSize: theme.font.size.sm, - borderRadius: theme.borderRadius, - padding: `0 ${theme.space[3]}`, - height: theme.input.size.base, - borderWidth: 1, - borderStyle: "solid", - borderColor: theme.color.gray.d400, - color: theme.color.d1000.gray, - backgroundColor: theme.color.background.d100, -}; - -export const inputDisabledStyles: CSSProperties = { - opacity: 0.5, - backgroundColor: theme.color.background.d200, - color: theme.color.gray.d400, - cursor: "default", - // boxShadow: `0 0 0 1px inset ${theme.color.input.border}`, -}; - -export const inputFocusStyles: CSSProperties = { - outlineOffset: 3, - outline: `${theme.color.gray.d600} solid 2px`, -}; - -export const inputDangerTextStyles: CSSProperties = { - color: theme.color.red.d700, -}; - -export const inputDangerFocusStyles: CSSProperties = { - ...inputDangerTextStyles, - outlineColor: theme.color.red.d700, - // boxShadow: ` - // 0 0 1px 1px inset hsla(${theme.color.red.l2}, 100%), - // ${theme.color.input.shadow} - // `, -}; - -export const Root = styled("label", { - base: { - ...utility.stack(2), - }, - variants: { - color: { - primary: { - color: theme.color.gray.d900 - }, - danger: { - color: theme.color.gray.d900, - }, - }, - }, - defaultVariants: { - color: "primary", - }, -}); - -type FormFieldProps = ComponentProps & { - hint?: JSX.Element; - label?: string; -}; - -export const Input = styled("input", { - base: { - ...inputStyles, - ":focus": { - ...inputFocusStyles, - }, - ":disabled": { - ...inputDisabledStyles, - }, - "::placeholder": { - color: theme.color.gray.d800 - }, - selectors: { - "[data-type='url'] &": { - borderTopLeftRadius: 0, - borderBottomLeftRadius: 0, - } - } - // ":invalid":{ - // ...inputDangerFocusStyles - // }, - // selectors: { - // [`${Root.selector({ color: "danger" })} &`]: { - // ...inputDangerFocusStyles, - // }, - // }, - }, - variants: { - color: { - primary: {}, - danger: { - ...inputDangerFocusStyles, - ":focus": { - ...inputDangerFocusStyles, - }, - }, - }, - size: { - sm: { - height: theme.input.size.sm, - }, - }, - }, - defaultVariants: { - color: "primary", - }, -}); - -export const InputRadio = styled("input", { - base: { - padding: 0, - WebkitAppearance: "none", - appearance: "none", - /* Not removed via appearance */ - margin: 0, - font: "inherit", - color: "currentColor", - width: "1.15em", - height: "1.15em", - border: "0.15em solid currentColor", - borderRadius: "50%", - transform: "translateY(-0.075em)", - display: "grid", - position: "relative", - placeContent: "center", - ":before": { - content: "", - width: "0.68em", - height: "0.68em", - borderRadius: "50%", - transform: " scale(0)", - transition: "120ms transform ease-in-out", - boxShadow: `inset 1em 1em ${theme.color.blue.d700}` - }, - selectors: { - "&:checked::before": { - transform: "scale(1)" - } - } - } -}); - -const Label = styled("p", { - base: { - fontWeight: 500, - textAlign: "left", - letterSpacing: -0.1, - fontSize: theme.font.size.mono_sm, - textTransform: "capitalize", - fontFamily: theme.font.family.heading, - }, -}); - -const InputLabel = styled("label", { - base: { - letterSpacing: -0.1, - fontSize: theme.font.size.sm, - lineHeight: theme.font.lineHeight, - height: theme.input.size.base, - appearance: "none", - padding: `0 ${theme.space[3]}`, - borderWidth: 0, - borderBottomWidth: 1, - borderStyle: "solid", - borderColor: theme.color.gray.d400, - color: theme.color.gray.d800, - backgroundColor: theme.color.background.d100, - transition: "all 0.3s cubic-bezier(0.4,0,0.2,1)", - position: "relative", - display: "flex", - alignItems: "center", - cursor: "pointer", - gap: "1em", - ":focus-within": { - color: theme.color.d1000.gray - }, - ":first-child": { - borderTopRightRadius: theme.borderRadius, - borderTopLeftRadius: theme.borderRadius, - }, - ":last-child": { - borderBottomWidth: 0, - borderBottomRightRadius: theme.borderRadius, - borderBottomLeftRadius: theme.borderRadius, - }, - ":hover": { - backgroundColor: theme.color.grayAlpha.d200, - color: theme.color.d1000.gray - }, - selectors: { - "&:has(input:checked)": { - color: theme.color.d1000.gray - } - } - }, -}); - -const Hint = styled("p", { - base: { - fontSize: theme.font.size.xs, - lineHeight: theme.font.lineHeight, - color: theme.color.gray.d800, - textAlign: "left" - }, - variants: { - color: { - primary: {}, - danger: { - color: theme.color.red.d700, - }, - }, - }, - defaultVariants: { - color: "primary", - }, -}); - -export function FormField(props: FormFieldProps) { - return ( - - - - - - {props.children} - - - {props.hint!} - - - ); -} - -type SelectProps = { - name: string; - value: any; - ref: (element: HTMLInputElement) => void; - onInput: JSX.EventHandler; - onChange: JSX.EventHandler; - onBlur: JSX.EventHandler; - options: { label: string; value: string }[]; - badges?: { label: string; color: keyof typeof theme.color.d1000 }[]; - required?: boolean; - class?: string; -}; - -const InputRadioContainer = styled("div", { - base: { - ...inputStyles, - display: "flex", - userSelect: "none", - flexDirection: "column", - height: "auto", - position: "relative", - padding: 0, - } -}) - -const Badge = styled("div", { - base: { - color: "#FFF", - marginLeft: "auto", - borderRadius: 9999, - letterSpacing: 0.5, - padding: "0 6px", - fontSize: theme.font.size.xs - } -}) - -export function Select(props: SelectProps) { - // Split select element props - const [, inputProps] = splitProps(props, [ - 'class', - 'value', - 'options', - 'badges', - ]); - - return ( - - - {({ label, value }, key) => ( - - - {label} - - {props.badges && - - {props.badges[key()].label} - - } - - - )} - - - - ); -} \ No newline at end of file diff --git a/packages/www/src/ui/index.ts b/packages/www/src/ui/index.ts deleted file mode 100644 index a5f93846..00000000 --- a/packages/www/src/ui/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./form" -export * from "./layout" -export * from "./text" -export * from "./theme" -export * from "./utility" -export * from "./button" \ No newline at end of file diff --git a/packages/www/src/ui/layout.tsx b/packages/www/src/ui/layout.tsx deleted file mode 100644 index 20afc89e..00000000 --- a/packages/www/src/ui/layout.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import { theme } from "./theme"; -import { styled } from "@macaron-css/solid"; - -export const FullScreen = styled("div", { - base: { - display: "flex", - flexDirection: "column", - alignItems: "center", - position:"relative", - textAlign: "center", - width: "100%", - justifyContent: "center" - }, - variants: { - inset: { - none: {}, - header: { - paddingTop: `calc(1px + ${theme.headerHeight.root})`, - // minHeight: `calc(100dvh - ${theme.headerHeight.root})`, - }, - }, - }, -}) - -export const Screen = styled("div", { - base: { - display: "flex", - position: "fixed", - inset: 0, - flexDirection: "column", - alignItems: "center", - textAlign: "center", - width: "100%", - justifyContent: "center" - }, - variants: { - inset: { - none: {}, - header: { - paddingTop: `calc(1px + ${theme.headerHeight.root})`, - minHeight: `calc(100dvh - ${theme.headerHeight.root})`, - }, - }, - }, -}) - -// export const Container = styled("div", { -// base: { -// backgroundColor: theme.color.background.d100, -// borderColor: theme.color.gray.d400, -// padding: "64px 80px 48px", -// justifyContent: "center", -// borderStyle: "solid", -// position: "relative", -// borderRadius: 12, -// alignItems: "center", -// maxWidth: 550, -// borderWidth: 1, -// display: "flex", -// }, -// variants: { -// flow: { -// column: { -// flexDirection: "column" -// }, -// row: { -// flexDirection: "row" -// } -// } -// } -// }) - -export const Container = styled("div", { - base: { - display: "flex", - flexDirection: "column", - }, - variants: { - space: (() => { - const result = {} as Record<`${keyof (typeof theme)["space"]}`, any>; - for (const key in theme.space) { - const value = theme.space[key as keyof typeof theme.space]; - result[key as keyof typeof theme.space] = { - gap: value, - }; - } - return result; - })(), - rounded: (() => { - const result = {} as Record<`${keyof (typeof theme)["space"]}`, any>; - for (const key in theme.space) { - const value = theme.space[key as keyof typeof theme.space]; - result[key as keyof typeof theme.space] = { - borderRadius: value, - }; - } - return result; - })(), - highlighted: { - true: { - borderColor: theme.color.gray.d400, - backgroundColor: theme.color.background.d100, - borderStyle: "solid", - borderWidth: 1, - padding: "64px 80px 48px", - maxWidth: 550, - } - }, - flex: { - true: { - flex: "1 1 auto", - }, - false: { - flex: "0 0 auto", - }, - }, - horizontal: { - center: { - alignItems: "center", - }, - start: { - alignItems: "flex-start", - }, - end: { - alignItems: "flex-end", - }, - }, - vertical: { - center: { - justifyContent: "center", - }, - start: { - justifyContent: "flex-start", - }, - end: { - justifyContent: "flex-end", - }, - }, - }, -}); \ No newline at end of file diff --git a/packages/www/src/ui/modal/index.ts b/packages/www/src/ui/modal/index.ts deleted file mode 100644 index 544525a7..00000000 --- a/packages/www/src/ui/modal/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { HModalRoot as Root } from './modal-root'; -export { HModalPanel as Panel } from './modal-panel'; -export { HModalTrigger as Trigger } from './modal-trigger'; -export * as Modal from "." \ No newline at end of file diff --git a/packages/www/src/ui/modal/modal-context.tsx b/packages/www/src/ui/modal/modal-context.tsx deleted file mode 100644 index 79e49c12..00000000 --- a/packages/www/src/ui/modal/modal-context.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Accessor, createContext, Setter, useContext } from "solid-js"; - -export const ModalContext = createContext(); - -export function useModal() { - const ctx = useContext(ModalContext); - if (!ctx) throw new Error("No modal context"); - return ctx; -} - -export type ModalContext = { - // core state - localId: string; - show: Accessor; - setShow: Setter; - onShow?: () => void; - onClose?: () => void; - closeOnBackdropClick?: boolean; - alert?: boolean; -}; \ No newline at end of file diff --git a/packages/www/src/ui/modal/modal-panel.tsx b/packages/www/src/ui/modal/modal-panel.tsx deleted file mode 100644 index 767c509d..00000000 --- a/packages/www/src/ui/modal/modal-panel.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { useModal } from './use-modal'; -import { useModal as useModalContext } from './modal-context'; -import { Accessor, ComponentProps, createEffect, createSignal, onCleanup } from 'solid-js'; - -export type ModalProps = Omit, 'open'> & { - onShow?: () => void; - onClose?: () => void; - onKeyDown?: () => void; - 'bind:show': Accessor; - closeOnBackdropClick?: boolean; - alert?: boolean; -}; - -export const HModalPanel = (props: ComponentProps<'dialog'>) => { - const { - activateFocusTrap, - closeModal, - deactivateFocusTrap, - showModal, - trapFocus, - wasModalBackdropClicked, - } = useModal(); - const context = useModalContext(); - - const [panelRef, setPanelRef] = createSignal(); - let focusTrapRef: any = null; - - createEffect(async () => { - const dialog = panelRef(); - if (!dialog) return; - - if (context.show()) { - // Handle iOS scroll position issue - const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); - let originalRAF; - - if (isIOS) { - originalRAF = window.requestAnimationFrame; - window.requestAnimationFrame = () => 42; - } - - await showModal(dialog); - - if (isIOS && originalRAF) { - window.requestAnimationFrame = originalRAF; - } - - // Setup focus trap after showing modal - focusTrapRef = await trapFocus(dialog); - activateFocusTrap(focusTrapRef); - - // Trigger show callback - context.onShow?.(); - } else { - await closeModal(dialog); - // Trigger close callback - context.onClose?.(); - } - - }); - - - onCleanup(() => { - if (focusTrapRef) { - deactivateFocusTrap(focusTrapRef); - } - }); - - const handleBackdropClick = async (e: MouseEvent) => { - if (context.alert === true || context.closeOnBackdropClick === false) { - return; - } - - // Only close if the backdrop itself was clicked (not content) - if (e.target instanceof HTMLDialogElement && await wasModalBackdropClicked(panelRef(), e)) { - context.setShow(false); - } - }; - - const handleKeyDown = (e: KeyboardEvent) => { - // Prevent spacebar/enter from triggering if dialog itself is focused - if (e.target instanceof HTMLDialogElement && [' ', 'Enter'].includes(e.key)) { - e.preventDefault(); - } - - // Handle escape key to close modal - if (e.key === 'Escape') { - e.preventDefault(); - e.stopPropagation(); - context.setShow(false); - } - - // Allow other keydown handlers to run - // props.onKeyDown?.(e); - }; - - return ( - { - e.stopPropagation(); - handleBackdropClick(e); - }} - > - {props.children} - - ); -}; \ No newline at end of file diff --git a/packages/www/src/ui/modal/modal-root.tsx b/packages/www/src/ui/modal/modal-root.tsx deleted file mode 100644 index 62a703e5..00000000 --- a/packages/www/src/ui/modal/modal-root.tsx +++ /dev/null @@ -1,34 +0,0 @@ - -import { ModalContext } from './modal-context'; -import { Accessor, ComponentProps, createSignal, createUniqueId, splitProps } from 'solid-js'; - -type ModalRootProps = { - onShow?: () => void; - onClose?: () => void; - 'bind:show'?: Accessor; - closeOnBackdropClick?: boolean; - alert?: boolean; -} & ComponentProps<'div'>; - -export const HModalRoot = (props: ModalRootProps) => { - const localId = createUniqueId(); - - const [modalProps, divProps] = splitProps(props, [ - 'bind:show', - 'closeOnBackdropClick', - 'onShow', - 'onClose', - 'alert', - ]); - - const [defaultShowSig, setDefaultShowSig] = createSignal(false); - const show = props["bind:show"] ?? defaultShowSig; - - return ( - -
- {props.children} -
-
- ); -}; \ No newline at end of file diff --git a/packages/www/src/ui/modal/modal-trigger.tsx b/packages/www/src/ui/modal/modal-trigger.tsx deleted file mode 100644 index 1cea854d..00000000 --- a/packages/www/src/ui/modal/modal-trigger.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { useModal } from './modal-context'; -import { ComponentProps } from 'solid-js'; - -export const HModalTrigger = (props: ComponentProps<"button">) => { - const modal = useModal(); - - const handleClick = () => { - modal.setShow((prev) => !prev); - }; - - return ( - - ); -}; \ No newline at end of file diff --git a/packages/www/src/ui/modal/use-modal.tsx b/packages/www/src/ui/modal/use-modal.tsx deleted file mode 100644 index 89f97cc7..00000000 --- a/packages/www/src/ui/modal/use-modal.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { FocusTrap, createFocusTrap } from 'focus-trap'; - -export type WidthState = { - width: number | null; -}; - -import { enableBodyScroll, disableBodyScroll } from 'body-scroll-lock-upgrade'; - -export function useModal() { - /** - * Listens for animation/transition events in order to - * remove Animation-CSS-Classes after animation/transition ended. - */ - const supportClosingAnimation = (modal: HTMLDialogElement) => { - modal.dataset.closing = ''; - modal.classList.add('modal-closing'); - - const { animationDuration, transitionDuration } = getComputedStyle(modal); - - if (animationDuration !== '0s') { - modal.addEventListener( - 'animationend', - (e) => { - if (e.target === modal) { - delete modal.dataset.closing; - modal.classList.remove('modal-closing'); - enableBodyScroll(modal); - modal.close(); - } - }, - { once: true }, - ); - } else if (transitionDuration !== '0s') { - modal.addEventListener( - 'transitionend', - (e) => { - if (e.target === modal) { - delete modal.dataset.closing; - modal.classList.remove('modal-closing'); - enableBodyScroll(modal); - modal.close(); - } - }, - { once: true }, - ); - } else if (animationDuration === '0s' && transitionDuration === '0s') { - delete modal.dataset.closing; - modal.classList.remove('modal-closing'); - enableBodyScroll(modal); - modal.close(); - } - }; - - /** - * Traps the focus of the given Modal - * @returns FocusTrap - */ - const trapFocus = (modal: HTMLDialogElement): FocusTrap => { - return createFocusTrap(modal, { escapeDeactivates: false }); - }; - - const activateFocusTrap = (focusTrap: FocusTrap | null) => { - try { - focusTrap?.activate(); - } catch { - // Activating the focus trap throws if no tabbable elements are inside the container. - // If this is the case we are fine with not activating the focus trap. - // That's why we ignore the thrown error. - } - }; - - const deactivateFocusTrap = (focusTrap: FocusTrap | null) => { - focusTrap?.deactivate(); - focusTrap = null; - }; - - /** - * Shows the given Modal. - * Applies a CSS-Class to animate the modal-showing. - * Calls the given callback that is executed after the Modal has been opened. - */ - const showModal = async (modal: HTMLDialogElement) => { - disableBodyScroll(modal, { reserveScrollBarGap: true }); - modal.showModal(); - }; - - /** - * Closes the given Modal. - * Applies a CSS-Class to animate the Modal-closing. - * Calls the given callback that is executed after the Modal has been closed. - */ - const closeModal = async (modal: HTMLDialogElement) => { - await supportClosingAnimation(modal); - }; - - /** - * Determines if the backdrop of the Modal has been clicked. - */ - const wasModalBackdropClicked = (modal: HTMLDialogElement | undefined, clickEvent: MouseEvent): boolean => { - if (!modal) { - return false; - } - - const rect = modal.getBoundingClientRect(); - - const wasBackdropClicked = - rect.left > clickEvent.clientX || - rect.right < clickEvent.clientX || - rect.top > clickEvent.clientY || - rect.bottom < clickEvent.clientY; - - /** - * If the inside focusable elements are not prevented, such as a button it will also fire a click event. - * - * Hitting the enter or space keys on a button inside of the dialog for example, will fire a "pointer" event. In reality, it fires our onClick$ handler because we have not prevented the default behavior. - * - * This is why we check if the pointerId is -1. - **/ - return (clickEvent as PointerEvent).pointerId === -1 ? false : wasBackdropClicked; - }; - - return { - trapFocus, - activateFocusTrap, - deactivateFocusTrap, - showModal, - closeModal, - wasModalBackdropClicked, - supportClosingAnimation, - }; -} \ No newline at end of file diff --git a/packages/www/src/ui/text.tsx b/packages/www/src/ui/text.tsx deleted file mode 100644 index 6cb7b2b9..00000000 --- a/packages/www/src/ui/text.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import { theme } from "./theme"; -import { styled } from "@macaron-css/solid"; -import { utility } from "./utility"; -import { CSSProperties } from "@macaron-css/core"; - -export const Text = styled("span", { - // base: { - // textWrap: "balance" - // }, - variants: { - leading: { - base: { - lineHeight: 1, - }, - normal: { - lineHeight: "normal", - }, - loose: { - lineHeight: theme.font.lineHeight, - }, - }, - align: { - left: { - textAlign: "left" - }, - center: { - textAlign: "center" - } - }, - spacing: { - none: { - letterSpacing: 0 - }, - xs: { - letterSpacing: -0.96 - }, - sm: { - letterSpacing: -0.96 - }, - md: { - letterSpacing: -1.28 - }, - lg: { - letterSpacing: -1.28 - } - }, - code: { - true: { - fontFamily: theme.font.family.code, - }, - }, - capitalize: { - true: { - textTransform: "capitalize", - }, - }, - uppercase: { - true: { - letterSpacing: 0.5, - textTransform: "uppercase", - }, - }, - weight: { - regular: { - fontWeight: theme.font.weight.regular, - }, - medium: { - fontWeight: theme.font.weight.medium, - }, - semibold: { - fontWeight: theme.font.weight.semibold, - }, - }, - center: { - true: { - textAlign: "center", - }, - }, - line: { - true: { - ...utility.text.line, - }, - }, - disableSelect: { - true: { - userSelect: "none", - WebkitUserSelect: "none", - }, - }, - pre: { - true: { - whiteSpace: "pre-wrap", - overflowWrap: "anywhere", - }, - }, - underline: { - true: { - textUnderlineOffset: 2, - textDecoration: "underline", - }, - }, - label: { - true: { - fontWeight: 500, - letterSpacing: 0.5, - textTransform: "uppercase", - fontFamily: theme.font.family.code, - }, - }, - break: { - true: { - wordBreak: "break-all", - }, - false: {}, - }, - size: (() => { - const result = {} as Record<`${keyof typeof theme.font.size}`, any>; - for (const [key, value] of Object.entries(theme.font.size)) { - result[key as keyof typeof theme.font.size] = { - fontSize: value, - }; - } - return result; - })(), - font: (() => { - const result = {} as Record<`${keyof typeof theme.font.family}`, any>; - for (const [key, value] of Object.entries(theme.font.family)) { - result[key as keyof typeof theme.font.family] = { - fontFamily: value, - }; - } - return result; - })(), - color: (() => { - const record = {} as Record; - for (const [key, _value] of Object.entries(theme.color.text)) { - record[key as keyof typeof record] = {}; - } - return record; - })(), - on: (() => { - const record = {} as Record< - keyof typeof theme.color.text.primary, - CSSProperties - >; - for (const [key, _value] of Object.entries(theme.color.text.primary)) { - record[key as keyof typeof record] = {}; - } - return record; - })(), - }, - compoundVariants: (() => { - const result: any[] = []; - for (const [color, ons] of Object.entries(theme.color.text)) { - for (const [on, value] of Object.entries(ons)) { - result.push({ - variants: { - color, - on, - }, - style: { - color: value, - }, - }); - } - } - return result; - })(), - defaultVariants: { - on: "base", - size: "base", - color: "primary", - spacing: "none", - weight: "regular", - }, -}); \ No newline at end of file diff --git a/packages/www/src/ui/theme.ts b/packages/www/src/ui/theme.ts deleted file mode 100644 index 3df7200c..00000000 --- a/packages/www/src/ui/theme.ts +++ /dev/null @@ -1,450 +0,0 @@ -import { createTheme } from "@macaron-css/core"; - -const constants = { - colorFadeDuration: "0.15s", - borderRadius: "6px", - textBoldWeight: "600", - iconOpacity: "0.85", - modalWidth: { - sm: "480px", - md: "640px", - lg: "800px", - }, - headerHeight: { - root: "68px", - stage: "52px", - }, -}; - -const formInput = { - size: { - base: "40px", - sm: "32px", - }, - }; - -const space = { - px: "1px", - 0: "0px", - 0.5: "0.125rem", - 1: "0.25rem", - 1.5: "0.375rem", - 2: "0.5rem", - 2.5: "0.625rem", - 3: "0.75rem", - 3.5: "0.875rem", - 4: "1rem", - 5: "1.25rem", - 6: "1.5rem", - 7: "1.75rem", - 8: "2rem", - 9: "2.25rem", - 10: "2.5rem", - 11: "2.75rem", - 12: "3rem", - 14: "3.5rem", - 16: "4rem", - 20: "5rem", - 24: "6rem", - 28: "7rem", - 32: "8rem", - 36: "9rem", - 40: "10rem", - 44: "11rem", - 48: "12rem", - 52: "13rem", - 56: "14rem", - 60: "15rem", - 64: "16rem", - 72: "18rem", - 80: "20rem", - 96: "24rem", -}; - -const font = { - lineHeight: "1.6", - family: { - heading: '"Mona Sans Variable", sans-serif', - body: "'Geist Sans', sans-serif", - code: '"Geist Mono Variable", monospace', - }, - weight: { - regular: "400", - medium: "500", - semibold: "600", - bold: "700", - extrabold: "800" - }, - size: { - mono_xs: "0.6875rem", - xs: "0.75rem", - mono_sm: "0.8125rem", - sm: "0.875rem", - mono_base: "0.9375rem", - base: "1rem", - mono_lg: "1.0625rem", - lg: "1.125rem", - mono_xl: "1.1875rem", - xl: "1.25rem", - mono_2xl: "1.375rem", - "2xl": "1.5rem", - "3xl": "1.875rem", - "4xl": "2rem", - "5xl": "3rem", - "6xl": "3.75rem", - "7xl": "4.5rem", - "8xl": "6rem", - "9xl": "8rem", - }, -}; - -const light = (() => { - const gray = { - d100: 'hsla(0,0%,95%)', - d200: 'hsla(0,0%,92%)', - d300: 'hsla(0,0%,90%)', - d400: 'hsla(0,0%,82%)', - d500: 'hsla(0,0%,79%)', - d600: 'hsla(0,0%,66%)', - d700: 'hsla(0,0%,56%)', - d800: 'hsla(0,0%,49%)', - d900: 'hsla(0,0%,40%)', - }; - - const blue = { - d100: 'hsla(212,100%,97%)', - d200: 'hsla(210,100%,96%)', - d300: 'hsla(210,100%,94%)', - d400: 'hsla(209,100%,90%)', - d500: 'hsla(209,100%,80%)', - d600: 'hsla(208,100%,66%)', - d700: 'hsla(212,100%,48%)', - d800: 'hsla(212,100%,41%)', - d900: 'hsla(211,100%,42%)', - }; - - const red = { - d100: "hsla(0,100%,97%)", - d200: "hsla(0,100%,96%)", - d300: "hsla(0,100%,95%)", - d400: "hsla(0,90%,92%)", - d500: "hsla(0,82%,85%)", - d600: "hsla(359,90%,71%)", - d700: "hsla(358,75%,59%)", - d800: "hsla(358,70%,52%)", - d900: "hsla(358,66%,48%)", - }; - const amber = { - d100: "hsla(39,100%,95%)", - d200: "hsla(44,100%,92%)", - d300: "hsla( 43,96%,90%)", - d400: "hsla(42,100%,78%)", - d500: "hsla(38,100%,71%)", - d600: "hsla( 36,90%,62%)", - d700: "hsla(39,100%,57%)", - d800: "hsla(35,100%,52%)", - d900: "hsla(30,100%,32%)", - }; - const green = { - d100: "hsla(120,60%,96%)", - d200: "hsla(120,60%,95%)", - d300: "hsla(120,60%,91%)", - d400: "hsla(122,60%,86%)", - d500: "hsla(124,60%,75%)", - d600: "hsla(125,60%,64%)", - d700: "hsla(131,41%,46%)", - d800: "hsla(132,43%,39%)", - d900: "hsla(133,50%,32%)", - }; - const teal = { - d100: "hsla(169,70%,96%)", - d200: "hsla(167,70%,94%)", - d300: "hsla(168,70%,90%)", - d400: "hsla(170,70%,85%)", - d500: "hsla(170,70%,72%)", - d600: "hsla(170,70%,57%)", - d700: "hsla(173,80%,36%)", - d800: "hsla(173,83%,30%)", - d900: "hsla(174,91%,25%)", - }; - - const purple = { - d100: "hsla(276,100%,97%)", - d200: "hsla(277,87%,97%)", - d300: "hsla(274,78%,95%)", - d400: "hsla(276,71%,92%)", - d500: "hsla(274,70%,82%)", - d600: "hsla(273,72%,73%)", - d700: "hsla(272,51%,54%)", - d800: "hsla(272,47%,45%)", - d900: "hsla(274,71%,43%)", - }; - - const pink = { - d100: "hsla(330,100%,96%)", - d200: "hsla(340,90%,96%)", - d300: "hsla(340,82%,94%)", - d400: "hsla(341,76%,91%)", - d500: "hsla(340,75%,84%)", - d600: "hsla(341,75%,73%)", - d700: "hsla(336,80%,58%)", - d800: "hsla(336,74%,51%)", - d900: "hsla(336,65%,45%)", - }; - - const grayAlpha = { - d100: "rgba(0,0,0,0.05)", - d200: "hsla(0,0%,0%,0.08)", - d300: "hsla(0,0%,0%,0.1)", - d400: "hsla(0,0%,0%,0.08)", - d500: "hsla(0,0%,0%,0.21)", - d600: "hsla(0,0%,0%,0.34)", - d700: "hsla(0,0%,0%,0.44)", - d800: "hsla(0,0%,0%,0.51)", - d900: "hsla(0,0%,0%,0.61)", - }; - - const d1000 = { - gray: 'hsla(0,0%,9%)', - blue: 'hsla(211,100%,15%)', - red: "hsla(355,49%,15%)", - amber: "hsla(20,79%,17%)", - green: "hsla(128,29%,15%)", - teal: "hsla(171,80%,13%)", - purple: "hsla(276,100%,15)", - pink: "hsla(333,74%,15%)", - grayAlpha: " hsla(0,0%,0%,0.91)", - } - const brand = "#FF4F01" - - const background = { - d100: 'rgba(255,255,255,0.8)', - d200: '#f4f5f6', - }; - - const headerGradient = "linear-gradient(rgba(66, 144, 243, 0.2) 0%, rgba(206, 127, 243, 0.1) 52.58%, rgba(248, 236, 215, 0) 100%)" - - const contrastFg = '#ffffff'; - const focusBorder = `0 0 0 1px ${grayAlpha.d600}, 0px 0px 0px 4px rgba(0,0,0,0.16)`; - const focusColor = blue.d700 - const hoverColor = "hsl(0,0%,22%)" - - const text = { - primary: { - base: d1000.gray, - surface: gray.d900, - }, - info: { - base: d1000.amber, - surface: amber.d900, - }, - danger: { - base: d1000.red, - surface: red.d900, - }, - }; - - return { - gray, - blue, - red, - amber, - green, - teal, - purple, - pink, - grayAlpha, - background, - contrastFg, - focusBorder, - focusColor, - d1000, - brand, - text, - headerGradient, - hoverColor - }; -})() - -const dark = (() => { - const gray = { - d100: "hsla(0,0%,10%)", - d200: "hsla(0,0%,12%)", - d300: "hsla(0,0%,16%)", - d400: "hsla(0,0%,18%)", - d500: "hsla(0,0%,27%)", - d600: "hsla(0,0%,53%)", - d700: "hsla(0,0%,56%)", - d800: "hsla(0,0%,49%)", - d900: "hsla(0,0%,63%)", - }; - - const blue = { - d100: "hsla(216,50%,12%)", - d200: "hsla(214,59%,15%)", - d300: "hsla(213,71%,20%)", - d400: "hsla(212,78%,23%)", - d500: "hsla(211,86%,27%)", - d600: "hsla(206,100%,50%)", - d700: "hsla(212,100%,48%)", - d800: "hsla(212,100%,41%)", - d900: "hsla(210,100%,66%)", - }; - - const red = { - d200: "hsla(357,46%,16%)", - d100: "hsla(357,37%,12%)", - d300: "hsla(356,54%,22%)", - d400: "hsla(357,55%,26%)", - d500: "hsla(357,60%,32%)", - d600: "hsla(358,75%,59%)", - d700: "hsla(358,75%,59%)", - d800: "hsla(358,69%,52%)", - d900: "hsla(358,100%,69%)", - }; - const amber = { - d100: "hsla(35,100%,8%)", - d200: "hsla(32,100%,10%)", - d300: "hsla(33,100%,15%)", - d400: "hsla(35,100%,17%)", - d500: "hsla(35,91%,22%)", - d600: "hsla(39,85%,49%)", - d700: "hsla(39,100%,57%)", - d800: "hsla(35,100%,52%)", - d900: "hsla(39,90%,50%)", - }; - const green = { - d100: "hsla(136,50%,9%)", - d200: "hsla(137,50%,12%)", - d300: "hsla(136,50%,14%)", - d400: "hsla(135,70%,16%)", - d500: "hsla(135,70%,23%)", - d600: "hsla(135,70%,34%)", - d700: "hsla(131,41%,46%)", - d800: "hsla(132,43%,39%)", - d900: "hsla(131,43%,57%)", - }; - const teal = { - d100: "hsla(169,78%,7%)", - d200: "hsla(170,74%,9%)", - d300: "hsla(171,75%,13%)", - d400: "hsla(171,85%,13%)", - d500: "hsla(172,85%,20%)", - d600: "hsla(172,85%,32%)", - d700: "hsla(173,80%,36%)", - d800: "hsla(173,83%,30%)", - d900: "hsla(174,90%,41%)", - }; - const purple = { - d100: "hsla(283,30%,12%)", - d200: "hsla(281,38%,16%)", - d300: "hsla(279,44%,23%)", - d400: "hsla(277,46%,28%)", - d500: "hsla(274,49%,35%)", - d600: "hsla(272,51%,54%)", - d700: "hsla(272,51%,54%)", - d800: "hsla(272,47%,45%)", - d900: "hsla(275,80%,71%)", - }; - const pink = { - d100: "hsla(335,32%,12%)", - d200: "hsla(335,43%,16%)", - d300: "hsla(335,47%,21%)", - d400: "hsla(335,51%,22%)", - d500: "hsla(335,57%,27%)", - d600: "hsla(336,75%,40%)", - d700: "hsla(336,80%,58%)", - d800: "hsla(336,74%,51%)", - d900: "hsla(341,90%,67%)", - }; - - const grayAlpha = { - d100: "rgba(255,255,255,0.06)", - d200: "hsla(0,0%,100%,0.09)", - d300: "hsla(0,0%,100%,0.13)", - d400: "hsla(0,0%,100%,0.14)", - d500: "hsla(0,0%,100%,0.24)", - d600: "hsla(0,0%,100%,0.51)", - d700: "hsla(0,0%,100%,0.54)", - d800: "hsla(0,0%,100%,0.47)", - d900: "hsla(0,0%,100%,0.61)", - }; - - const d1000 = { - gray: 'hsla(0,0%,93%)', - blue: 'hsla( 206,100%,96%)', - red: "hsla( 353,90%,96%)", - amber: "hsla( 40,94%,93%))", - green: "hsla(136,73%,94%)", - teal: "hsla(166,71%,93%)", - purple: "hsla(281,73%,96%)", - pink: "hsla( 333,90%,96%)", - grayAlpha: "hsla(0,0%,100%,0.92)", - } - - const brand = "#FF4F01" - - const background = { - d100: "rgba(255,255,255,0.04)", - d200: 'rgb(19,21,23)', - }; - - const contrastFg = '#ffffff'; - const focusBorder = `0 0 0 1px ${grayAlpha.d600}, 0px 0px 0px 4px rgba(255,255,255,0.24)`; - const focusColor = blue.d900 - const hoverColor = "hsl(0,0%,80%)" - const headerGradient = "linear-gradient(rgba(66, 144, 243, 0.2) 0%, rgba(239, 148, 225, 0.1) 50%, rgba(191, 124, 7, 0) 100%)" - - const text = { - primary: { - base: d1000.gray, - surface: gray.d900, - }, - info: { - base: d1000.amber, - surface: amber.d900, - }, - danger: { - base: d1000.red, - surface: red.d900, - }, - }; - - return { - gray, - blue, - red, - amber, - green, - teal, - purple, - pink, - grayAlpha, - background, - contrastFg, - focusBorder, - focusColor, - d1000, - text, - brand, - headerGradient, - hoverColor - }; -})() - -export const [lightClass, theme] = createTheme({ - ...constants, - space, - font, - color: light, - input: formInput -}); - -export const darkClass = createTheme(theme, { - ...theme, - ...constants, - space, - font, - color: dark, - input: formInput -}); \ No newline at end of file diff --git a/packages/www/src/ui/utility.tsx b/packages/www/src/ui/utility.tsx deleted file mode 100644 index adffb17c..00000000 --- a/packages/www/src/ui/utility.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { theme } from "./theme"; - -export const utility = { - textLine() { - return { - overflow: "hidden", - whiteSpace: "nowrap", - textOverflow: "ellipsis", - } as any; - }, - stack(space: keyof (typeof theme)["space"]) { - return { - display: "flex", - flexDirection: "column", - gap: theme.space[space], - } as any; - }, - row(space: keyof (typeof theme)["space"]) { - return { - display: "flex", - gap: theme.space[space], - } as any; - }, - - text: { - line: { - overflow: "hidden", - whiteSpace: "nowrap", - textOverflow: "ellipsis", - } as any, - label: { - fontWeight: 500, - letterSpacing: 0.5, - textTransform: "uppercase", - fontFamily: theme.font.family.code, - } as any, - pre: { - whiteSpace: "pre-wrap", - overflowWrap: "anywhere", - } as any, - }, -}; \ No newline at end of file diff --git a/packages/www/sst-env.d.ts b/packages/www/sst-env.d.ts deleted file mode 100644 index b6a7e906..00000000 --- a/packages/www/sst-env.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/* deno-fmt-ignore-file */ - -/// - -import "sst" -export {} \ No newline at end of file diff --git a/packages/www/tsconfig.json b/packages/www/tsconfig.json deleted file mode 100644 index 1e3333d0..00000000 --- a/packages/www/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "preserve", - "jsxImportSource": "solid-js", - "types": [ - "vite/client" - ], - "noEmit": true, - "isolatedModules": true, - "baseUrl": ".", - "paths": { - "@nestri/www/*": [ - "./src/*" - ] - } - } -} \ No newline at end of file diff --git a/packages/www/vite.config.ts b/packages/www/vite.config.ts deleted file mode 100644 index 089f7cba..00000000 --- a/packages/www/vite.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import path from "path"; -import { defineConfig } from "vite"; -import solidPlugin from "vite-plugin-solid"; -import { macaronVitePlugin } from "@macaron-css/vite"; - -export default defineConfig({ - plugins: [macaronVitePlugin(), solidPlugin()], - server: { - port: 3000, - host: "0.0.0.0", - }, - build: { - target: "esnext", - }, - resolve: { - alias: { - "@nestri/www": path.resolve(__dirname, "./src"), - }, - }, -}); \ No newline at end of file diff --git a/packages/zero/.gitignore b/packages/zero/.gitignore deleted file mode 100644 index 4028d080..00000000 --- a/packages/zero/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -sync-replica* -*.sql \ No newline at end of file diff --git a/packages/zero/package.json b/packages/zero/package.json deleted file mode 100644 index 6e055695..00000000 --- a/packages/zero/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@nestri/zero", - "version": "0.0.0", - "private": true, - "type": "module", - "dependencies": { - "@nestri/core": "*", - "@rocicorp/zero": "0.20.2025051800" - }, - "scripts": { - "dev": "zero-deploy-permissions && zero-cache", - "generate": "zero-deploy-permissions --output-format=sql --output-file=permissions.sql" - }, - "trustedDependencies": [ - "@rocicorp/zero-sqlite3" - ] -} \ No newline at end of file diff --git a/packages/zero/schema.ts b/packages/zero/schema.ts deleted file mode 100644 index a2956397..00000000 --- a/packages/zero/schema.ts +++ /dev/null @@ -1,317 +0,0 @@ -import type { Limitations } from "@nestri/core/src/steam/steam.sql"; -import type { Size, Links } from "@nestri/core/src/base-game/base-game.sql"; -import type { ImageColor, ImageDimensions } from "@nestri/core/src/images/images.sql"; -import { - json, - table, - number, - string, - enumeration, - createSchema, - relationships, - definePermissions, - type ExpressionBuilder, -} from "@rocicorp/zero"; - -const timestamps = { - time_created: number(), - time_deleted: number().optional(), -} as const; - -// Table Definitions -const users = table("users") - .columns({ - id: string(), - name: string(), - email: string(), - last_login: number(), - avatar_url: string().optional(), - polar_customer_id: string().optional(), - ...timestamps - }) - .primaryKey("id"); - -const steam_accounts = table("steam_accounts") - .columns({ - id: string(), - name: string(), - status: string(), - user_id: string(), - avatar_hash: string(), - member_since: number(), - last_synced_at: number(), - real_name: string().optional(), - profile_url: string().optional(), - limitations: json(), - ...timestamps, - }) - .primaryKey("id"); - -const friends_list = table("friends_list") - .columns({ - steam_id: string(), - friend_steam_id: string(), - ...timestamps, - }) - .primaryKey("steam_id", "friend_steam_id"); - -const games = table("games") - .columns({ - base_game_id: string(), - category_slug: string(), - type: enumeration<"tag" | "genre" | "publisher" | "developer" | "categorie" | "franchise">(), - ...timestamps - }) - .primaryKey("category_slug", "base_game_id", "type") - -const base_games = table("base_games") - .columns({ - id: string(), - slug: string(), - name: string(), - // This should be an array, and i dunno how to include it here - size: json(), - release_date: number(), - links: json().optional(), - description: string().optional(), - primary_genre: string().optional(), - controller_support: enumeration<"full" | "partial" | "unknown">(), - compatibility: enumeration<"high" | "mid" | "low" | "unknown">(), - score: number(), - ...timestamps - }) - .primaryKey("id") - -const categories = table("categories") - .columns({ - slug: string(), - type: enumeration<"tag" | "genre" | "publisher" | "developer">(), - name: string(), - ...timestamps - }) - .primaryKey("slug", "type") - -const game_libraries = table("game_libraries") - .columns({ - base_game_id: string(), - total_playtime: number(), - owner_steam_id: string(), - last_played: number().optional(), - ...timestamps - }).primaryKey("base_game_id", "owner_steam_id") - -const images = table("images") - .columns({ - image_hash: string(), - base_game_id: string(), - type: enumeration<"heroArt" | "icon" | "logo" | "superHeroArt" | "poster" | "boxArt" | "screenshot" | "background">(), - position: number(), - dimensions: json(), - extracted_color: json(), - ...timestamps - }).primaryKey("image_hash") - -// Schema and Relationships -export const schema = createSchema({ - tables: [users, steam_accounts, friends_list, categories, base_games, games, game_libraries, images], - relationships: [ - relationships(steam_accounts, (r) => ({ - user: r.one({ - sourceField: ["user_id"], - destSchema: users, - destField: ["id"], - }), - friends: r.many( - { - sourceField: ["id"], - destSchema: friends_list, - destField: ["steam_id"], - }, - { - sourceField: ["friend_steam_id"], - destSchema: steam_accounts, - destField: ["id"], - } - ), - libraryGames: r.many( - { - sourceField: ["id"], - destSchema: game_libraries, - destField: ["owner_steam_id"], - }, - { - sourceField: ["base_game_id"], - destSchema: base_games, - destField: ["id"], - } - ), - })), - relationships(users, (r) => ({ - steamAccounts: r.many({ - sourceField: ["id"], - destSchema: steam_accounts, - destField: ["user_id"] - }) - })), - relationships(base_games, (r) => ({ - libraryOwners: r.many( - { - sourceField: ["id"], - destSchema: game_libraries, - destField: ["base_game_id"], - }, - { - sourceField: ["owner_steam_id"], - destSchema: steam_accounts, - destField: ["id"], - } - ), - categories: r.many( - { - sourceField: ["id"], - destSchema: games, - destField: ["base_game_id"], - }, - { - sourceField: ["category_slug", "type"], - destSchema: categories, - destField: ["slug", "type"], - } - ), - images: r.many({ - sourceField: ["id"], - destSchema: images, - destField: ["base_game_id"] - }) - })), - relationships(categories, (r) => ({ - baseGames: r.many( - { - sourceField: ["slug", "type"], - destSchema: games, - destField: ["category_slug", "type"], - }, - { - sourceField: ["base_game_id"], - destSchema: base_games, - destField: ["id"], - } - ), - })), - relationships(images, (r) => ({ - base_game: r.one({ - sourceField: ["base_game_id"], - destSchema: base_games, - destField: ["id"], - }), - })), - //Junction tables - relationships(friends_list, (r) => ({ - steam: r.one({ - sourceField: ["steam_id"], - destSchema: steam_accounts, - destField: ["id"] - }), - friend: r.one({ - sourceField: ["friend_steam_id"], - destSchema: steam_accounts, - destField: ["id"] - }), - })), - - relationships(game_libraries, (r) => ({ - owner: r.one({ - sourceField: ["owner_steam_id"], - destSchema: steam_accounts, - destField: ["id"] - }), - baseGame: r.one({ - sourceField: ["base_game_id"], - destSchema: base_games, - destField: ["id"] - }), - })), - - relationships(games, (r) => ({ - baseGame: r.one({ - sourceField: ["base_game_id"], - destSchema: base_games, - destField: ["id"] - }), - category: r.one({ - sourceField: ["category_slug", "type"], - destSchema: categories, - destField: ["slug", "type"] - }), - })), - ], -}); - -export type Schema = typeof schema; - -type Auth = { - sub: string; - properties: { - userID: string; - email: string; - }; -}; - -export const permissions = definePermissions(schema, () => { - return { - steam_accounts: { - row: { - select: [ - (auth: Auth, q: ExpressionBuilder) => q.exists("user", (u) => u.where("id", auth.sub)), - //Allow friends to view friends steam accounts - (auth: Auth, q: ExpressionBuilder) => q.exists("friends", (u) => u.where("user_id", auth.sub)), - ] - }, - }, - users: { - row: { - select: [ - (auth: Auth, q: ExpressionBuilder) => q.cmp("id", "=", auth.sub), - ] - }, - }, - friends_list: { - row: { - select: [ - (auth: Auth, q: ExpressionBuilder) => q.exists("steam", (u) => u.where("user_id", auth.sub)), - (auth: Auth, q: ExpressionBuilder) => q.exists("friend", (u) => u.where("user_id", auth.sub)), - ] - }, - }, - game_libraries: { - row: { - select: [ - (auth: Auth, q: ExpressionBuilder) => q.exists("owner", (u) => u.where("user_id", auth.sub)), - //allow friends to see their friends libraries - (auth: Auth, q: ExpressionBuilder) => q.exists("owner", (u) => u.related("friends", (f) => f.where("user_id", auth.sub))), - ] - } - }, - // Games are publicly viewable - but only to logged in users - games: { - row: { - select: [(auth: Auth, q: ExpressionBuilder) => q.cmpLit(auth.sub, "IS NOT", null),] - } - }, - base_games: { - row: { - select: [(auth: Auth, q: ExpressionBuilder) => q.cmpLit(auth.sub, "IS NOT", null),] - } - }, - categories: { - row: { - select: [(auth: Auth, q: ExpressionBuilder) => q.cmpLit(auth.sub, "IS NOT", null),] - } - }, - images: { - row: { - select: [(auth: Auth, q: ExpressionBuilder) => q.cmpLit(auth.sub, "IS NOT", null),] - } - }, - }; -}); \ No newline at end of file diff --git a/packages/zero/sst-env.d.ts b/packages/zero/sst-env.d.ts deleted file mode 100644 index b6a7e906..00000000 --- a/packages/zero/sst-env.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/* deno-fmt-ignore-file */ - -/// - -import "sst" -export {} \ No newline at end of file diff --git a/protobufs/buf.yaml b/protobufs/buf.yaml deleted file mode 100644 index 534fcc92..00000000 --- a/protobufs/buf.yaml +++ /dev/null @@ -1,7 +0,0 @@ -version: v2 -breaking: - use: - - FILE -lint: - use: - - STANDARD diff --git a/protobufs/latency_tracker.proto b/protobufs/latency_tracker.proto deleted file mode 100644 index 6e56b573..00000000 --- a/protobufs/latency_tracker.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; - -import "google/protobuf/timestamp.proto"; - -option go_package = "relay/internal/proto"; - -package proto; - -message ProtoTimestampEntry { - string stage = 1; - google.protobuf.Timestamp time = 2; -}; - -message ProtoLatencyTracker { - string sequence_id = 1; - repeated ProtoTimestampEntry timestamps = 2; -} \ No newline at end of file diff --git a/protobufs/messages.proto b/protobufs/messages.proto deleted file mode 100644 index 82d147ce..00000000 --- a/protobufs/messages.proto +++ /dev/null @@ -1,41 +0,0 @@ -syntax = "proto3"; - -option go_package = "relay/internal/proto"; - -import "types.proto"; -import "latency_tracker.proto"; - -package proto; - -message ProtoMessageBase { - string payload_type = 1; - ProtoLatencyTracker latency = 2; -} - -message ProtoMessage { - ProtoMessageBase message_base = 1; - oneof payload { - // Input types - ProtoMouseMove mouse_move = 2; - ProtoMouseMoveAbs mouse_move_abs = 3; - ProtoMouseWheel mouse_wheel = 4; - ProtoMouseKeyDown mouse_key_down = 5; - ProtoMouseKeyUp mouse_key_up = 6; - ProtoKeyDown key_down = 7; - ProtoKeyUp key_up = 8; - - // Controller input types - ProtoControllerAttach controller_attach = 9; - ProtoControllerDetach controller_detach = 10; - ProtoControllerRumble controller_rumble = 11; - ProtoControllerStateBatch controller_state_batch = 12; - - // Signaling types - ProtoICE ice = 20; - ProtoSDP sdp = 21; - ProtoRaw raw = 22; - ProtoClientRequestRoomStream client_request_room_stream = 23; - ProtoClientDisconnected client_disconnected = 24; - ProtoServerPushStream server_push_stream = 25; - } -} diff --git a/protobufs/types.proto b/protobufs/types.proto deleted file mode 100644 index deeed486..00000000 --- a/protobufs/types.proto +++ /dev/null @@ -1,149 +0,0 @@ -syntax = "proto3"; - -option go_package = "relay/internal/proto"; - -package proto; - -/* Mouse messages */ - -// MouseMove message -message ProtoMouseMove { - int32 x = 1; - int32 y = 2; -} - -// MouseMoveAbs message -message ProtoMouseMoveAbs { - int32 x = 1; - int32 y = 2; -} - -// MouseWheel message -message ProtoMouseWheel { - int32 x = 1; - int32 y = 2; -} - -// MouseKeyDown message -message ProtoMouseKeyDown { - int32 key = 1; -} - -// MouseKeyUp message -message ProtoMouseKeyUp { - int32 key = 1; -} - -/* Keyboard messages */ - -// KeyDown message -message ProtoKeyDown { - int32 key = 1; -} - -// KeyUp message -message ProtoKeyUp { - int32 key = 1; -} - -/* Controller messages */ - -// ControllerAttach message -message ProtoControllerAttach { - string id = 1; // One of the following enums: "ps", "xbox" or "switch" - int32 session_slot = 2; // Session specific slot number (0-3) - string session_id = 3; // Session ID of the client -} - -// ControllerDetach message -message ProtoControllerDetach { - int32 session_slot = 1; // Session specific slot number (0-3) - string session_id = 2; // Session ID of the client -} - -// ControllerRumble message -message ProtoControllerRumble { - int32 session_slot = 1; // Session specific slot number (0-3) - string session_id = 2; // Session ID of the client - int32 low_frequency = 3; // Low frequency rumble (0-65535) - int32 high_frequency = 4; // High frequency rumble (0-65535) - int32 duration = 5; // Duration in milliseconds -} - -// ControllerStateBatch - single message containing full or partial controller state -message ProtoControllerStateBatch { - int32 session_slot = 1; // Session specific slot number (0-3) - string session_id = 2; // Session ID of the client - - enum UpdateType { - FULL_STATE = 0; // Complete controller state - DELTA = 1; // Only changed fields - } - UpdateType update_type = 3; - - // Sequence number for packet loss detection - uint32 sequence = 4; - - // Button state map (Linux event codes) - map button_changed_mask = 5; - - // Analog inputs - optional int32 left_stick_x = 6; // -32768 to 32767 - optional int32 left_stick_y = 7; // -32768 to 32767 - optional int32 right_stick_x = 8; // -32768 to 32767 - optional int32 right_stick_y = 9; // -32768 to 32767 - optional int32 left_trigger = 10; // -32768 to 32767 - optional int32 right_trigger = 11; // -32768 to 32767 - optional int32 dpad_x = 12; // -1, 0, or 1 - optional int32 dpad_y = 13; // -1, 0, or 1 - - // Bitmask indicating which fields have changed - // Bit 0: button_changed_mask, Bit 1: left_stick_x, Bit 2: left_stick_y, etc. - optional uint32 changed_fields = 14; -} - -/* WebRTC + signaling */ - -message RTCIceCandidateInit { - string candidate = 1; - optional uint32 sdpMLineIndex = 2; - optional string sdpMid = 3; - optional string usernameFragment = 4; -} - -message RTCSessionDescriptionInit { - string sdp = 1; - string type = 2; -} - -// ProtoICE message -message ProtoICE { - RTCIceCandidateInit candidate = 1; -} - -// ProtoSDP message -message ProtoSDP { - RTCSessionDescriptionInit sdp = 1; -} - -// ProtoRaw message -message ProtoRaw { - string data = 1; -} - -// ProtoClientRequestRoomStream message -message ProtoClientRequestRoomStream { - string room_name = 1; - string session_id = 2; -} - -// ProtoClientDisconnected message -message ProtoClientDisconnected { - string session_id = 1; - repeated int32 controller_slots = 2; -} - -// ProtoServerPushStream message -message ProtoServerPushStream { - string room_name = 1; -} diff --git a/sst-env.d.ts b/sst-env.d.ts deleted file mode 100644 index a544f67e..00000000 --- a/sst-env.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/* deno-fmt-ignore-file */ - -import "sst" -declare module "sst" { - export interface Resource { - "DISCORD_CLIENT_ID": { - "type": "sst.sst.Secret" - "value": string - } - "DISCORD_CLIENT_SECRET": { - "type": "sst.sst.Secret" - "value": string - } - "Database": { - "host": string - "name": string - "password": string - "type": "sst.sst.Linkable" - "user": string - } - "POLAR_API_KEY": { - "type": "sst.sst.Secret" - "value": string - } - "Urls": { - "api": string - "auth": string - "openapi": string - "site": string - "type": "sst.sst.Linkable" - } - } -} -// cloudflare -import * as cloudflare from "@cloudflare/workers-types"; -declare module "sst" { - export interface Resource { - "Auth": cloudflare.Service - "AuthStorage": cloudflare.KVNamespace - } -} - -import "sst" -export {} \ No newline at end of file diff --git a/sst.config.ts b/sst.config.ts deleted file mode 100644 index 453b2bf9..00000000 --- a/sst.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -/// -export default $config({ - app(input) { - return { - name: "nestri", - removal: input?.stage === "production" ? "retain" : "remove", - protect: ["production"].includes(input?.stage), - home: "cloudflare", - providers: { - cloudflare: "6.6.0", - random: "4.17.0", - command: "1.0.2", - neon: "0.9.0", - }, - }; - }, - async run() { - const fs = await import("fs"); - const outputs = {}; - for (const value of fs.readdirSync("./cloud/infra/")) { - const result = await import("./cloud/infra/" + value); - if (result.outputs) Object.assign(outputs, result.outputs); - } - return outputs; - }, -}); diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 0967ef42..00000000 --- a/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{}