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 @@
-
-
-
-
-
-
-
-
-
-Deploy and stream games/apps in the cloud. Use our GPUs or bring your own.
-
-
-
-
-
-
-
-
-
-
-
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"}
-
-
-
- {theme?.css && (
-
- )}
-
-
-
-
- {props.children}
-
-
-
- {props.page === "password" && (
-
- )}
- {props.page === "root" && (
-
- )}
- {props.page === "popup" && (
-
- )}
-
-
- )
-}
diff --git a/cloud/packages/functions/src/auth/ui/css.ts b/cloud/packages/functions/src/auth/ui/css.ts
deleted file mode 100644
index c4eff239..00000000
--- a/cloud/packages/functions/src/auth/ui/css.ts
+++ /dev/null
@@ -1,586 +0,0 @@
-export function css() {
- return `
-@import url("https://unpkg.com/tailwindcss@3.4.15/src/css/preflight.css");
-
-:root {
- --color-background-dark: #0e0e11;
- --color-background-light: #ffffff;
- --color-primary-dark: #6772e5;
- --color-primary-light: #6772e5;
- --border-radius: 0;
-
- --color-background: var(--color-background-dark);
- --color-primary: var(--color-primary-dark);
-
- --spinner-size: 16px;
- --spinner-color: #FFF;
-
- @media (prefers-color-scheme: light) {
- --color-background: var(--color-background-light);
- --color-primary: var(--color-primary-light);
- }
-
- --color-high: oklch(
- from var(--color-background) clamp(0, calc((l - 0.714) * -1000), 1) 0 0
- );
- --color-low: oklch(from var(--color-background) clamp(0, calc((l - 0.714) * 1000), 1) 0 0);
- --lightness-high: color-mix(
- in oklch,
- var(--color-high) 0%,
- oklch(var(--color-high) 0 0)
- );
- --lightness-low: color-mix(
- in oklch,
- var(--color-low) 0%,
- oklch(var(--color-low) 0 0)
- );
- --font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --font-scale: 1;
-
- --font-size-xs: calc(0.75rem * var(--font-scale));
- --font-size-sm: calc(0.875rem * var(--font-scale));
- --font-size-md: calc(1rem * var(--font-scale));
- --font-size-lg: calc(1.125rem * var(--font-scale));
- --font-size-xl: calc(1.25rem * var(--font-scale));
- --font-size-2xl: calc(1.5rem * var(--font-scale));
-}
-
-html, html * {
- margin: 0;
- padding: 0;
-}
-
-[data-component="root"] {
- font-family: var(--font-family);
- background-color: var(--color-background);
- padding: 1rem 1rem 0;
- color: white;
- position: relative;
- height: 100%;
- width: 100%;
- display: flex;
- align-items: center;
- flex-direction: column;
- user-select: none;
- color: var(--color-high);
-}
-
- [data-component="logo-footer"] {
- position: fixed;
- bottom: -1px;
- font-size: 100%;
- max-width: 1440px;
- width: 100%;
- pointer-events: none;
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 0 8px;
- z-index: 10;
- overflow: hidden;
-
- & > svg {
- width: 100%;
- height: 100%;
- transform: translateY(40%);
- opacity: 70%;
- }
- }
-
-[data-component="popup"] {
- display: flex;
- width: 100%;
- height: 100%;
- gap: 5px;
- justify-content: center;
- align-items: center;
- font-size: 1.3rem;
- line-height: 1rem;
- font-weight: 500;
-
- & [data-component="spinner"]{
- --spinner-size: 24px;
- display: block;
- }
-}
-
-[data-component="center"] {
- max-width: 380px;
- width: 100%;
- height: 100%;
- justify-content: center;
- display: flex;
- padding: 0 0 120px 0;
- flex-direction: column;
- gap: 1rem;
-
- &[data-size="small"] {
- width: 300px;
- }
-}
-
-[data-component="link"] {
- text-decoration: underline;
- font-weight: 600;
-}
-
-[data-component="label"] {
- display: flex;
- gap: 0.75rem;
- flex-direction: column;
- font-size: var(--font-size-xs);
-}
-
-[data-component="input"] {
- width: 100%;
- height: 2.5rem;
- padding: 0 1rem;
- padding-left: 36px;
- border: 1px solid transparent;
- --background: oklch(
- from var(--color-background) calc(l + (-0.06 * clamp(0, calc((l - 0.714) * 1000), 1) + 0.03)) c h
- );
- background: var(--background);
- border-color: #343434;
- border-radius: calc(var(--border-radius) * 0.25rem);
- font-size: 0.875rem;
- outline: none;
-
- &:focus {
- outline: none;
- box-shadow: 0 0 0 2px #161616,0 0 0 4px #707070
- }
-
- &:user-invalid:focus {
- box-shadow: 0 0 0 2px #161616,0 0 0 4px #ff6369;
- }
-
- &:user-invalid:not(:focus) {
- border-color: #ff6369;
- }
-
- @media (prefers-color-scheme: light) {
- border-color: #e2e2e2;
- color: #171717;
-
- &:focus {
- outline: none;
- box-shadow: 0 0 0 2px #fcfcfc,0 0 0 4px #8f8f8f;
- }
-
- &:user-invalid:focus {
- box-shadow: 0 0 0 2px #fcfcfc, 0 0 0 4px #cd2b31;
- }
-
- &:user-invalid:not(:focus) {
- border-color: #cd2b31;
- }
- }
-}
-
-[data-component="button"] {
- height: 2.5rem;
- cursor: pointer;
- margin-top: 3px;
- font-weight: 500;
- font-size: var(--font-size-sm);
- border-radius: calc(var(--border-radius) * 0.25rem);
- display: flex;
- gap: 0.75rem;
- align-items: center;
- justify-content: center;
- background: var(--color-primary);
- color: oklch(from var(--color-primary) clamp(0, calc((l - 0.714) * -1000), 1) 0 0);
-
- &[data-color="ghost"] {
- background: transparent;
- color: var(--color-high);
- border: 1px solid
- oklch(
- from var(--color-background)
- calc(clamp(0.22, l + (-0.12 * clamp(0, calc((l - 0.714) * 1000), 1) + 0.06), 0.88)) c h
- );
- }
-
- &:focus [data-component="spinner"]{
- display: block;
- }
-
- [data-slot="icon"] {
- width: 16px;
- height: 16px;
-
- svg {
- width: 100%;
- height: 100%;
- }
- }
-}
-
-[data-component="button-root"] {
- transition-property: border-color,background,color,transform,box-shadow;
- transition-duration: .15s;
- transition-timing-function: ease;
- height: 48px;
- cursor: pointer;
- padding: 0px 14px;
- margin-top: 3px;
- font-weight: 500;
- font-size: 16px;
- border-radius: 8px;
- display: flex;
- gap: 12px;
- align-items: center;
- justify-content: center;
- background: transparent;
- border: 2px solid #00000014;
- --spinner-color: #000;
-
- @media (prefers-color-scheme: dark) {
- border: 2px solid #ffffff24;
- --spinner-color: #FFF;
- }
-
- &[data-color="github"] {
- background: #24292e;
- color: #fff;
- border: 2px solid #1B1F22;
- &:hover {
- background: #434D56;
- border: 1px solid transparent;
- }
- @media (prefers-color-scheme: dark) {
- border: 1px solid transparent;
- background: #434D56;
- &:hover {
- background: #24292e;
- }
- }
- }
-
- &[data-color="discord"] {
- background: #4445e7;
- border: 2px solid #3836cc;
- color: #fff;
- &:hover {
- background: #5865F2;
- border: 1px solid transparent;
- }
- @media (prefers-color-scheme: dark) {
- border: 1px solid transparent;
- background: #5865F2;
- &:hover {
- background: #4445e7;
- }
- }
- }
-
- &:hover {
- background:rgb(229, 229, 229);
- }
-
- @media (prefers-color-scheme: dark) {
- &:hover {
- background:rgb(38, 38,38);
- }
- }
-
- [data-slot="icon"] {
- width: 20px;
- height: 20px;
-
- svg {
- width: 100%;
- height: 100%;
- }
- }
-}
-
-[data-component="form"] {
- max-width: 100%;
- display: flex;
- flex-direction: column;
- margin: 0;
-}
-
-[data-loading="true"]{
- & [data-component="spinner"]{
- display: block;
- }
-
- & [data-slot="icon"] {
- display: none;
- }
-}
-
-[data-disabled="true"] {
- & button {
- background: rgb(229,229,229) !important;
- border: 2px solid #00000014 !important;
- opacity: .7 !important;
- color: inherit !important;
- cursor: not-allowed !important;
- @media (prefers-color-scheme: dark) {
- background: rgb(38, 38,38) !important;
- border: 2px solid #ffffff24 !important;
- }
- }
-}
-
-[data-component="form-root"] {
- max-width: 100%;
- display: flex;
- flex-direction: column;
- margin: 0;
- gap: 12px;
-}
-
-[data-component="form-header"] {
- display: flex;
- gap: 0.75rem;
- align-items: start;
- justify-content: center;
- flex-direction: column;
- color: #a0a0a0;
- max-width: 400px;
- font-weight: 400;
- font-size: 0.875rem;
- line-height: 1.25rem;
-
- @media (prefers-color-scheme: light) {
- color: #6f6f6f
- }
-
- & > hr {
- border:0;
- background: #282828;
- height:2px;
- width:100%;
- margin-top:4px;
-
- @media (prefers-color-scheme: light) {
- background: #e8e8e8
- }
- }
-
- & > h1 {
- color: #ededed;
- font-weight:500;
- font-size: 1.25rem;
- letter-spacing:-.020625rem;
- line-height:1.5rem;
- margin:0;
- overflow-wrap:break-word;
-
- @media (prefers-color-scheme: light) {
- color: #171717
- }
- }
-}
-
-[data-component="form-header-root"] {
- color: #FFF;
- max-width: 400px;
- font-weight: 700;
- display: flex;
- justify-content: center;
- align-items: center;
- font-size: 2rem;
- line-height: 2.5rem;
- letter-spacing: -0.049375rem;
-
- @media (prefers-color-scheme: light) {
- color: #000
- }
-
- // & > hr {
- // border:0;
- // background: #282828;
- // height:2px;
- // width:100%;
- // margin-top:4px;
-
- // @media (prefers-color-scheme: light) {
- // background: #e8e8e8
- // }
- // }
-}
-
-[data-component="input-container"] {
- display: flex;
- gap: 0.5rem;
- align-items: start;
- justify-content: center;
- flex-direction: column;
- color: #a0a0a0;
- max-width: 400px;
- font-weight: 400px;
- font-size: 0.875rem;
- line-height: 1.25rem;
-
- @media (prefers-color-scheme: light) {
- color: #6f6f6f
- }
-
- & > small {
- color: #ff6369;
- display: block;
- line-height: 1rem;
- font-weight: 400;
- font-size: 0.75rem;
-
- @media (prefers-color-scheme: light) {
- color: #cd2b31;
- }
- }
-}
-
-[data-error="true"] {
- & input {
- border-color: #ff6369;
- &:focus {
- box-shadow: 0 0 0 2px #161616,0 0 0 4px #ff6369;
- border-color: transparent;
- }
-
- @media (prefers-color-scheme: light) {
- border-color: #cd2b31;
- :focus {
- box-shadow: 0 0 0 2px #fcfcfc, 0 0 0 4px #cd2b31;
- border-color: transparent;
- }
- }
- }
-}
-
-[data-component="input-wrapper"] {
- position: relative;
- width:100%;
-}
-
-[data-component="input-icon"] {
- position: absolute;
- top: 50%;
- transform: translateY(-50%);
- left: 8px;
- width: 20px;
- height: 40px;
- display: flex;
- justify-content: center;
- align-items: center;
- pointer-events: none;
-
- & > svg {
- width:20px;
- height:20px;
- display:block;
- max-width:100%;
- }
-}
-
-input:-webkit-autofill,
- input:-webkit-autofill:focus {
- transition: background-color 0s 600000s, color 0s 600000s !important;
-}
-
-
-[data-component="spinner"] {
- height: var(--spinner-size,20px);
- width: var(--spinner-size,20px);
- margin-left: calc(var(--spinner-size,20px)*-1px);
- display: none;
-
- & > div {
- position: relative;
- top: 50%;
- left: 50%;
- height: var(--spinner-size,20px);
- width: var(--spinner-size,20px);
- }
-
- & > div > div {
- animation: spin 1.2s linear infinite;
- background: var(--spinner-color);
- border-radius: 9999px;
- height: 8%;
- left: -10%;
- position: absolute;
- top: -3.9%;
- width: 24%;
- }
-
- & > div > div:first-child {
- animation-delay: -1.2s;
- transform: rotate(.0001deg) translate(146%);
- }
-
- & > div > div:nth-child(2) {
- animation-delay: -1.1s;
- transform: rotate(30deg) translate(146%);
- }
-
- & > div > div:nth-child(3) {
- animation-delay: -1s;
- transform: rotate(60deg) translate(146%);
- }
-
- & > div > div:nth-child(4) {
- animation-delay: -.9s;
- transform: rotate(90deg) translate(146%);
- }
-
- & > div > div:nth-child(5) {
- animation-delay: -.8s;
- transform: rotate(120deg) translate(146%);
- }
-
- & > div > div:nth-child(6) {
- animation-delay: -.7s;
- transform: rotate(150deg) translate(146%);
- }
-
- & > div > div:nth-child(7) {
- animation-delay: -.6s;
- transform: rotate(180deg) translate(146%);
- }
-
- & > div > div:nth-child(8) {
- animation-delay: -.5s;
- transform: rotate(210deg) translate(146%);
- }
-
- & > div > div:nth-child(9) {
- animation-delay: -.4s;
- transform: rotate(240deg) translate(146%);
- }
-
- & > div > div:nth-child(10) {
- animation-delay: -.3s;
- transform: rotate(270deg) translate(146%);
- }
-
- & > div > div:nth-child(11) {
- animation-delay: -.2s;
- transform: rotate(300deg) translate(146%);
- }
-
- & > div > div:nth-child(12) {
- animation-delay: -.1s;
- transform: rotate(330deg) translate(146%);
- }
-}
-
-@keyframes spin {
-0% {
- opacity: 1;
-}
-
-100% {
- opacity: .15;
-}
-
-}
-
- `
-}
\ No newline at end of file
diff --git a/cloud/packages/functions/src/auth/ui/index.ts b/cloud/packages/functions/src/auth/ui/index.ts
deleted file mode 100644
index e5919fb6..00000000
--- a/cloud/packages/functions/src/auth/ui/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from "./password"
-export * from "./select"
\ No newline at end of file
diff --git a/cloud/packages/functions/src/auth/ui/oauth2.tsx b/cloud/packages/functions/src/auth/ui/oauth2.tsx
deleted file mode 100644
index b344057b..00000000
--- a/cloud/packages/functions/src/auth/ui/oauth2.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-/** @jsxImportSource hono/jsx */
-import fetch from "node-fetch"
-import { Layout } from "./base"
-import { OauthError } from "@openauthjs/openauth/error"
-import { getRelativeUrl } from "@openauthjs/openauth/util"
-import { type Provider } from "@openauthjs/openauth/provider/provider"
-
-export interface Oauth2Config {
- type?: string
- clientID: string
- clientSecret: string
- endpoint: {
- authorization: string
- token: string
- }
- scopes: string[]
- query?: Record
-}
-
-export type Oauth2WrappedConfig = Omit
-
-export interface Oauth2Token {
- access: string
- refresh: string
- expiry: number
- raw: Record
-}
-
-interface AdapterState {
- state: string
- redirect: string
-}
-
-export function Oauth2Adapter(
- config: Oauth2Config,
-): Provider<{ tokenset: Oauth2Token; clientID: string }> {
- const query = config.query || {}
- return {
- type: config.type || "oauth2",
- init(routes, ctx) {
- routes.get("/authorize", async (c) => {
- const state = crypto.randomUUID()
- await ctx.set(c, "adapter", 60 * 10, {
- state,
- redirect: getRelativeUrl(c, "./popup"),
- })
- const authorization = new URL(config.endpoint.authorization)
- authorization.searchParams.set("client_id", config.clientID)
- authorization.searchParams.set(
- "redirect_uri",
- getRelativeUrl(c, "./popup"),
- )
- authorization.searchParams.set("response_type", "code")
- authorization.searchParams.set("state", state)
- authorization.searchParams.set("scope", config.scopes.join(" "))
- for (const [key, value] of Object.entries(query)) {
- authorization.searchParams.set(key, value)
- }
- return c.redirect(authorization.toString())
- })
-
- routes.get("/popup", async (c) => {
- const jsx = (
-
-
-
-
- {new Array(12).fill(0).map((i, k) => (
-
- ))}
-
-
- Nestri is verifying your connection...
-
-
- ) as string
- return new Response(jsx.toString(), {
- status: 200,
- headers: {
- "Content-Type": "text/html",
- },
- })
- })
-
- routes.get("/callback", async (c) => {
- const adapter = (await ctx.get(c, "adapter")) as AdapterState
- const code = c.req.query("code")
- const state = c.req.query("state")
- const error = c.req.query("error")
- if (error) {
- console.log("oauth2 error", error)
- throw new OauthError(
- error.toString() as any,
- c.req.query("error_description")?.toString() || "",
- )
- }
- if (!adapter || !code || (adapter.state && state !== adapter.state))
- return c.redirect(getRelativeUrl(c, "./authorize"))
- const body = new URLSearchParams({
- client_id: config.clientID,
- client_secret: config.clientSecret,
- code,
- grant_type: "authorization_code",
- redirect_uri: adapter.redirect,
- })
- const json: any = await fetch(config.endpoint.token, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- Accept: "application/json",
- },
- body: body.toString(),
- }).then((r) => r.json())
- if ("error" in json) {
- console.error("oauth2 error", error)
- throw new OauthError(json.error, json.error_description)
- }
- return ctx.success(c, {
- clientID: config.clientID,
- tokenset: {
- get access() {
- return json.access_token
- },
- get refresh() {
- return json.refresh_token
- },
- get expiry() {
- return json.expires_in
- },
- get raw() {
- return json
- },
- },
- })
- })
- },
- }
-}
diff --git a/cloud/packages/functions/src/auth/ui/password.tsx b/cloud/packages/functions/src/auth/ui/password.tsx
deleted file mode 100644
index a4e5ee18..00000000
--- a/cloud/packages/functions/src/auth/ui/password.tsx
+++ /dev/null
@@ -1,481 +0,0 @@
-/** @jsxImportSource hono/jsx */
-import {
- type PasswordChangeError,
- type PasswordConfig,
- type PasswordLoginError,
- type PasswordRegisterError,
-} from "../adapters"
-// import { Layout } from "@openauthjs/openauth/ui/base"
-import { Layout } from "./base"
-import "@openauthjs/openauth/ui/form"
-// import { FormAlert } from "@openauthjs/openauth/ui/form"
-
-const DEFAULT_COPY = {
- error_email_taken: "There is already an account with this email.",
- error_username_taken: "There is already an account with this username.",
- error_invalid_code: "Code is incorrect.",
- error_invalid_email: "Email is not valid.",
- error_invalid_password: "Password is incorrect.",
- error_invalid_username: "Username can only contain letters.",
- error_password_mismatch: "Passwords do not match.",
- register_title: "Welcome to the app",
- register_description: "Sign in with your email",
- login_title: "Welcome to the app",
- login_description: "Sign in with your email",
- register: "Register",
- register_prompt: "Don't have an account?",
- login_prompt: "Already have an account?",
- login: "Login",
- change_prompt: "Forgot your password?",
- change: "Well that sucks",
- code_resend: "Resend code",
- code_return: "Back to",
- logo: "A",
- input_email: "john@doe.com",
- input_password: "●●●●●●●●●●●",
- input_code: "●●●●●●",
- input_username: "john",
- input_repeat: "●●●●●●●●●●●",
- button_continue: "Continue",
-} satisfies {
- [key in `error_${| PasswordLoginError["type"]
- | PasswordRegisterError["type"]
- | PasswordChangeError["type"]}`]: string
-} & Record
-
-export type PasswordUICopy = typeof DEFAULT_COPY
-
-export interface PasswordUIOptions {
- sendCode: PasswordConfig["sendCode"]
- copy?: Partial
-}
-
-export function PasswordUI(input: PasswordUIOptions) {
- const copy = {
- ...DEFAULT_COPY,
- ...input.copy,
- }
- return {
- sendCode: input.sendCode,
- login: async (_req, form, error): Promise => {
- const emailError = ["invalid_email", "email_taken"].includes(
- error?.type || "",
- )
- const passwordError = ["invalid_password", "password_mismatch"].includes(
- error?.type || "",
- )
- const jsx = (
-
-
-
-
- )
- return new Response(jsx.toString(), {
- status: error ? 401 : 200,
- headers: {
- "Content-Type": "text/html",
- },
- })
- },
- register: async (_req, state, form, error): Promise => {
- const emailError = ["invalid_email", "email_taken"].includes(
- error?.type || "",
- )
- const passwordError = ["invalid_password", "password_mismatch"].includes(
- error?.type || "",
- )
-
- //Just in case the server does it
- const codeError = ["invalid_code"].includes(
- error?.type || "",
- )
-
- const usernameError = ["invalid_username", "username_taken"].includes(
- error?.type || "",
- );
-
- const jsx = (
-
-
-
-
- ) as string
- return new Response(jsx.toString(), {
- headers: {
- "Content-Type": "text/html",
- },
- })
- },
- change: async (_req, state, form, error): Promise => {
- const passwordError = ["invalid_password", "password_mismatch"].includes(
- error?.type || "",
- )
-
- const emailError = ["invalid_email", "email_taken"].includes(
- error?.type || "",
- )
-
- const codeError = ["invalid_code"].includes(
- error?.type || "",
- )
-
- const jsx = (
-
-
-
Forgot Password
- {state.type != "update" && (
-
- Suddenly had an epiphany?{" "}
-
- {copy.login}
-
-
- )}
-
-
-
- {state.type === "code" && (
-
- )}
-
- )
- return new Response(jsx.toString(), {
- status: error ? 400 : 200,
- headers: {
- "Content-Type": "text/html",
- },
- })
- },
- } satisfies PasswordConfig
-}
diff --git a/cloud/packages/functions/src/auth/ui/select.tsx b/cloud/packages/functions/src/auth/ui/select.tsx
deleted file mode 100644
index e358fcba..00000000
--- a/cloud/packages/functions/src/auth/ui/select.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-/** @jsxImportSource hono/jsx */
-
-import { Layout } from "./base"
-
-export interface SelectProps {
- providers?: Record<
- string,
- {
- hide?: boolean
- display?: string
- }
- >
-}
-
-export function Select(props?: SelectProps) {
- return async (
- providers: Record,
- _req: Request,
- ): Promise => {
- const jsx = (
-
-
-
Welcome to Nestri
-
-
- {Object.entries(providers).map(([key, type]) => {
- const match = props?.providers?.[key]
- if (match?.hide) return
- const icon = ICON[key]
- return (
-
- {icon && (
- <>
-
-
- {new Array(12).fill(0).map((i, k) => (
-
- ))}
-
-
- {icon}
- >
- )}
- Continue with {match?.display || DISPLAY[type] || type}
-
- )
- })}
-
-
- )
-
- return new Response(jsx.toString(), {
- headers: {
- "Content-Type": "text/html",
- },
- })
- }
-}
-
-const DISPLAY: Record = {
- twitch: "Twitch",
- google: "Google",
- github: "GitHub",
- discord: "Discord",
- password: "Password",
-}
-
-const ICON: Record = {
- code: (
-
-
-
- ),
- password: (
-
- //
- ),
- twitch: (
-
-
-
- ),
- google: (
-
-
-
- ),
- github: (
-
-
-
- ),
- discord: (
-
-
-
- )
-}
diff --git a/cloud/packages/functions/src/auth/utils/discord.ts b/cloud/packages/functions/src/auth/utils/discord.ts
deleted file mode 100644
index d6ca09b1..00000000
--- a/cloud/packages/functions/src/auth/utils/discord.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import fetch from "node-fetch"
-
-export const handleDiscord = async (accessKey: string) => {
- try {
- const response = await fetch("https://discord.com/api/v10/users/@me", {
- headers: {
- Authorization: `Bearer ${accessKey}`,
- "Content-Type": "application/json",
- },
- });
-
- if (!response.ok) {
- throw new Error(`Discord API error: ${response.status}`);
- }
-
- const user = await response.json();
-
- if (!user.verified) {
- throw new Error("Email not verified");
- }
-
- return {
- primary: {
- email: user.email,
- verified: user.verified,
- primary: true
- },
- avatar: user.avatar
- ? `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png`
- : null,
- username: user.global_name ?? user.username,
- };
- } catch (error) {
- console.error('Discord OAuth error:', error);
- throw error;
- }
-
-}
\ No newline at end of file
diff --git a/cloud/packages/functions/src/auth/utils/github.ts b/cloud/packages/functions/src/auth/utils/github.ts
deleted file mode 100644
index 81b655f9..00000000
--- a/cloud/packages/functions/src/auth/utils/github.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import fetch from "node-fetch";
-
-export const handleGithub = async (accessKey: string) => {
- const headers = {
- Authorization: `token ${accessKey}`,
- Accept: "application/vnd.github.v3+json",
- "User-Agent": "Nestri"
- };
-
- try {
- const [emails, user] = await Promise.all([
- fetch("https://api.github.com/user/emails", { headers }).then(r => {
- if (!r.ok) throw new Error(`Failed to fetch emails: ${r.status}`);
- return r.json();
- }),
- fetch("https://api.github.com/user", { headers }).then(r => {
- if (!r.ok) throw new Error(`Failed to fetch user: ${r.status}`);
- return r.json();
- })
- ]);
-
- const primaryEmail = emails.find((email: { primary: boolean }) => email.primary);
-
- if (!primaryEmail.verified) {
- throw new Error("Email not verified");
- }
- // console.log("raw user", user)
-
- const { email, primary, verified } = primaryEmail;
-
- return {
- primary: { email, primary, verified },
- avatar: user.avatar_url,
- username: user.name ?? user.login,
- };
- } catch (error) {
- console.error('GitHub OAuth error:', error);
- throw error;
- }
-}
\ No newline at end of file
diff --git a/cloud/packages/functions/src/auth/utils/index.ts b/cloud/packages/functions/src/auth/utils/index.ts
deleted file mode 100644
index 1544575a..00000000
--- a/cloud/packages/functions/src/auth/utils/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from "./discord"
-export * from "./github"
\ No newline at end of file
diff --git a/cloud/packages/functions/src/events/index.ts b/cloud/packages/functions/src/events/index.ts
deleted file mode 100644
index 51c8f354..00000000
--- a/cloud/packages/functions/src/events/index.ts
+++ /dev/null
@@ -1,358 +0,0 @@
-import "zod-openapi/extend";
-import { Resource } from "sst";
-import { bus } from "sst/aws/bus";
-import { Actor } from "@nestri/core/actor";
-import { Game } from "@nestri/core/game/index";
-import { Steam } from "@nestri/core/steam/index";
-import { Client } from "@nestri/core/client/index";
-import { Friend } from "@nestri/core/friend/index";
-import { Images } from "@nestri/core/images/index";
-import { Library } from "@nestri/core/library/index";
-import { chunkArray } from "@nestri/core/utils/index";
-import { BaseGame } from "@nestri/core/base-game/index";
-import { Categories } from "@nestri/core/categories/index";
-import { ImageTypeEnum } from "@nestri/core/images/images.sql";
-import { PutObjectCommand, S3Client, HeadObjectCommand } from "@aws-sdk/client-s3";
-
-const s3 = new S3Client({});
-
-export const handler = bus.subscriber(
- [
- Library.Events.Add,
- BaseGame.Events.New,
- Steam.Events.Updated,
- Steam.Events.Created,
- BaseGame.Events.NewBoxArt,
- BaseGame.Events.NewHeroArt,
- ],
- async (event) => {
- console.log(event.type, event.properties, event.metadata);
- switch (event.type) {
- case "new_image.save": {
- const input = event.properties;
- const image = await Client.getImageInfo({ url: input.url, type: input.type });
-
- await Images.create({
- type: image.type,
- imageHash: image.hash,
- baseGameID: input.appID,
- position: image.position,
- fileSize: image.fileSize,
- sourceUrl: image.sourceUrl,
- dimensions: image.dimensions,
- extractedColor: image.averageColor,
- });
-
- try {
- //Check whether the image already exists
- await s3.send(
- new HeadObjectCommand({
- Bucket: Resource.Storage.name,
- Key: `images/${image.hash}`,
- })
- );
-
- } catch (e) {
- // Save to s3 because it doesn't already exist
- await s3.send(
- new PutObjectCommand({
- Bucket: Resource.Storage.name,
- Key: `images/${image.hash}`,
- Body: image.buffer,
- ...(image.format && { ContentType: `image/${image.format}` }),
- Metadata: {
- type: image.type,
- appID: input.appID,
- }
- })
- )
- }
-
- break;
- }
- case "new_box_art_image.save": {
- const input = event.properties;
-
- const image = await Client.createBoxArt(input);
-
- await Images.create({
- type: image.type,
- imageHash: image.hash,
- baseGameID: input.appID,
- position: image.position,
- fileSize: image.fileSize,
- sourceUrl: image.sourceUrl,
- dimensions: image.dimensions,
- extractedColor: image.averageColor,
- });
-
- try {
- //Check whether the image already exists
- await s3.send(
- new HeadObjectCommand({
- Bucket: Resource.Storage.name,
- Key: `images/${image.hash}`,
- })
- );
-
- } catch (e) {
- // Save to s3 because it doesn't already exist
- await s3.send(
- new PutObjectCommand({
- Bucket: Resource.Storage.name,
- Key: `images/${image.hash}`,
- Body: image.buffer,
- ...(image.format && { ContentType: `image/${image.format}` }),
- Metadata: {
- type: image.type,
- appID: input.appID,
- }
- })
- )
- }
-
- break;
- }
- case "new_hero_art_image.save": {
- const input = event.properties;
-
- const images = await Client.createHeroArt(input);
-
- await Promise.all(
- images.map(async (image) => {
- await Images.create({
- type: image.type,
- imageHash: image.hash,
- baseGameID: input.appID,
- position: image.position,
- fileSize: image.fileSize,
- sourceUrl: image.sourceUrl,
- dimensions: image.dimensions,
- extractedColor: image.averageColor,
- });
-
- try {
- //Check whether the image already exists
- await s3.send(
- new HeadObjectCommand({
- Bucket: Resource.Storage.name,
- Key: `images/${image.hash}`,
- })
- );
-
- } catch (e) {
- // Save to s3 because it doesn't already exist
- await s3.send(
- new PutObjectCommand({
- Bucket: Resource.Storage.name,
- Key: `images/${image.hash}`,
- Body: image.buffer,
- ...(image.format && { ContentType: `image/${image.format}` }),
- Metadata: {
- type: image.type,
- appID: input.appID,
- }
- })
- )
- }
- })
- )
-
- break;
- }
- case "library.add": {
-
- await Actor.provide(
- event.metadata.actor.type,
- event.metadata.actor.properties,
- async () => {
- const game = event.properties
- // First check whether the base_game exists, if not get it
- const appID = game.appID.toString();
- const exists = await BaseGame.fromID(appID);
-
- if (!exists) {
- const appInfo = await Client.getAppInfo(appID);
-
- await BaseGame.create({
- id: appID,
- name: appInfo.name,
- size: appInfo.size,
- slug: appInfo.slug,
- links: appInfo.links,
- score: appInfo.score,
- description: appInfo.description,
- releaseDate: appInfo.releaseDate,
- primaryGenre: appInfo.primaryGenre,
- compatibility: appInfo.compatibility,
- controllerSupport: appInfo.controllerSupport,
- })
-
- const allCategories = [...appInfo.tags, ...appInfo.genres, ...appInfo.publishers, ...appInfo.developers, ...appInfo.categories, ...appInfo.franchises]
-
- const uniqueCategories = Array.from(
- new Map(allCategories.map(c => [`${c.type}:${c.slug}`, c])).values()
- );
-
- await Promise.all(
- uniqueCategories.map(async (cat) => {
- //Create category if it doesn't exist
- await Categories.create({
- type: cat.type, slug: cat.slug, name: cat.name
- })
-
- //Create game if it doesn't exist
- await Game.create({ baseGameID: appID, categorySlug: cat.slug, categoryType: cat.type })
- })
- )
-
- const imageUrls = appInfo.images
-
- await Promise.all(
- ImageTypeEnum.enumValues.map(async (type) => {
- switch (type) {
- case "backdrop": {
- await bus.publish(Resource.Bus, BaseGame.Events.New, { appID, type: "backdrop", url: imageUrls.backdrop })
- break;
- }
- case "banner": {
- await bus.publish(Resource.Bus, BaseGame.Events.New, { appID, type: "banner", url: imageUrls.banner })
- break;
- }
- case "icon": {
- await bus.publish(Resource.Bus, BaseGame.Events.New, { appID, type: "icon", url: imageUrls.icon })
- break;
- }
- case "logo": {
- await bus.publish(Resource.Bus, BaseGame.Events.New, { appID, type: "logo", url: imageUrls.logo })
- break;
- }
- case "poster": {
- await bus.publish(
- Resource.Bus,
- BaseGame.Events.New,
- { appID, type: "poster", url: imageUrls.poster }
- )
- break;
- }
- case "heroArt": {
- await bus.publish(
- Resource.Bus,
- BaseGame.Events.NewHeroArt,
- { appID, backdropUrl: imageUrls.backdrop, screenshots: imageUrls.screenshots }
- )
- break;
- }
- case "boxArt": {
- await bus.publish(
- Resource.Bus,
- BaseGame.Events.NewBoxArt,
- { appID, logoUrl: imageUrls.logo, backgroundUrl: imageUrls.backdrop }
- )
- break;
- }
- }
- })
- )
- }
-
- // Add to user's library
- await Library.add({
- baseGameID: appID,
- lastPlayed: game.lastPlayed ? new Date(game.lastPlayed) : null,
- totalPlaytime: game.totalPlaytime,
- })
- })
-
- break;
- }
- case "steam_account.created":
- case "steam_account.updated": {
- const userID = event.properties.userID;
-
- try {
- const steamID = event.properties.steamID;
- // Get friends info
- const friends = await Client.getFriendsList(steamID);
-
- const friendSteamIDs = friends.friendslist.friends.map(f => f.steamid);
-
- // Steam API has a limit of requesting 100 friends at a go
- const friendChunks = chunkArray(friendSteamIDs, 100);
-
- const settled = await Promise.allSettled(
- friendChunks.map(async (friendIDs) => {
- const friendsInfo = await Client.getUserInfo(friendIDs)
-
- return await Promise.all(
- friendsInfo.map(async (friend) => {
- const wasAdded = await Steam.create(friend);
-
- if (!wasAdded) {
- console.log(`Friend ${friend.id} already exists`)
- }
-
- await Friend.add({ friendSteamID: friend.id, steamID })
-
- return friend.id
- })
- )
- })
- )
-
- settled
- .filter(result => result.status === 'rejected')
- .forEach(result => console.warn('[putFriends] failed:', (result as PromiseRejectedResult).reason))
-
- const prod = (Resource.App.stage === "production" || Resource.App.stage === "dev")
-
- const friendIDs = [
- steamID,
- ...(prod ? settled
- .filter(result => result.status === "fulfilled")
- .map(f => f.value)
- .flat() : [])
- ]
-
- await Promise.all(
- friendIDs.map(async (currentSteamID) => {
- // Get user library
- const gameLibrary = await Client.getUserLibrary(currentSteamID);
-
- const queryLib = await Promise.allSettled(
- gameLibrary.response.games.map(async (game) => {
- await Actor.provide(
- "steam",
- {
- steamID: currentSteamID,
- },
- async () => {
-
- await bus.publish(
- Resource.Bus,
- Library.Events.Add,
- {
- appID: game.appid,
- totalPlaytime: game.playtime_forever,
- lastPlayed: game.rtime_last_played ? new Date(game.rtime_last_played * 1000) : null,
- }
- )
-
- }
- )
- })
- )
-
- queryLib
- .filter(i => i.status === "rejected")
- .forEach(e => console.warn(`[pushUserLib]: Failed to push user library to queue: ${e.reason}`))
- })
- )
- } catch (error: any) {
- console.error(`Failed to process Steam data for user ${userID}:`, error);
- }
- break;
- }
- }
- },
-);
\ No newline at end of file
diff --git a/cloud/packages/functions/src/queues/retry.ts b/cloud/packages/functions/src/queues/retry.ts
deleted file mode 100644
index da374bb3..00000000
--- a/cloud/packages/functions/src/queues/retry.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { Resource } from "sst";
-import type { SQSHandler } from "aws-lambda";
-import {
- SQSClient,
- SendMessageCommand
-} from "@aws-sdk/client-sqs";
-import {
- LambdaClient,
- InvokeCommand,
- GetFunctionCommand,
- ResourceNotFoundException,
-} from "@aws-sdk/client-lambda";
-
-const lambda = new LambdaClient({});
-lambda.middlewareStack.remove("recursionDetectionMiddleware");
-const sqs = new SQSClient({});
-sqs.middlewareStack.remove("recursionDetectionMiddleware");
-
-export const handler: SQSHandler = async (evt) => {
- for (const record of evt.Records) {
- const parsed = JSON.parse(record.body);
- console.log("body", parsed);
- const functionName = parsed.requestContext.functionArn
- .replace(":$LATEST", "")
- .split(":")
- .pop();
- if (parsed.responsePayload) {
- const attempt = (parsed.requestPayload.attempts || 0) + 1;
-
- const info = await lambda.send(
- new GetFunctionCommand({
- FunctionName: functionName,
- }),
- );
- const max =
- Number.parseInt(
- info.Configuration?.Environment?.Variables?.RETRIES || "",
- ) || 0;
- console.log("max retries", max);
- if (attempt > max) {
- console.log(`giving up after ${attempt} retries`);
- // send to dlq
- await sqs.send(
- new SendMessageCommand({
- QueueUrl: Resource.Dlq.url,
- MessageBody: JSON.stringify({
- requestPayload: parsed.requestPayload,
- requestContext: parsed.requestContext,
- responsePayload: parsed.responsePayload,
- }),
- }),
- );
- return;
- }
- const seconds = Math.min(Math.pow(2, attempt), 900);
- console.log(
- "delaying retry by ",
- seconds,
- "seconds for attempt",
- attempt,
- );
- parsed.requestPayload.attempts = attempt;
- await sqs.send(
- new SendMessageCommand({
- QueueUrl: Resource.RetryQueue.url,
- DelaySeconds: seconds,
- MessageBody: JSON.stringify({
- requestPayload: parsed.requestPayload,
- requestContext: parsed.requestContext,
- }),
- }),
- );
- }
-
- if (!parsed.responsePayload) {
- console.log("triggering function");
- try {
- await lambda.send(
- new InvokeCommand({
- InvocationType: "Event",
- Payload: Buffer.from(JSON.stringify(parsed.requestPayload)),
- FunctionName: functionName,
- }),
- );
- } catch (e) {
- if (e instanceof ResourceNotFoundException) {
- return;
- }
- throw e;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/cloud/packages/functions/src/realtime/authorizer.ts b/cloud/packages/functions/src/realtime/authorizer.ts
deleted file mode 100644
index 9c99f16a..00000000
--- a/cloud/packages/functions/src/realtime/authorizer.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Resource } from "sst";
-import { subjects } from "../subjects";
-import { realtime } from "sst/aws/realtime";
-import { createClient } from "@openauthjs/openauth/client";
-
-const client = createClient({
- clientID: "realtime",
- issuer: Resource.Auth.url
-});
-
-export const handler = realtime.authorizer(async (token) => {
-
- console.log("token", token)
-
- const result = await client.verify(subjects, token);
-
- if (result.err) {
- console.log("error", result.err)
- return {
- subscribe: [],
- publish: [],
- };
- }
-
- if (result.subject.type == "machine") {
- console.log("machineID", result.subject.properties.machineID)
- console.log("fingerprint", result.subject.properties.fingerprint)
-
- return {
- //It can publish and listen to other instances under this machineID
- publish: [`${Resource.App.name}/${Resource.App.stage}/${result.subject.properties.fingerprint}/*`],
- subscribe: [`${Resource.App.name}/${Resource.App.stage}/${result.subject.properties.fingerprint}/*`],
- };
- }
-
- return {
- publish: [],
- subscribe: [],
- };
-});
\ No newline at end of file
diff --git a/cloud/packages/functions/src/realtime/create.ts b/cloud/packages/functions/src/realtime/create.ts
deleted file mode 100644
index 8c6f23fa..00000000
--- a/cloud/packages/functions/src/realtime/create.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { ECSClient, RunTaskCommand } from "@aws-sdk/client-ecs";
-const client = new ECSClient()
-
-export const handler = async (event: any) => {
- console.log("event", event)
- const clusterArn = process.env.ECS_CLUSTER
- const taskDefinitionArn = process.env.TASK_DEFINITION
- const authFingerprintKey = process.env.AUTH_FINGERPRINT
-
- try {
-
- const runResponse = await client.send(new RunTaskCommand({
- taskDefinition: taskDefinitionArn,
- cluster: clusterArn,
- count: 1,
- launchType: "EC2",
- overrides: {
- containerOverrides: [
- {
- name: "nestri",
- environment: [
- {
- name: "AUTH_FINGERPRINT_KEY",
- value: authFingerprintKey
- },
- {
- name: "NESTRI_ROOM",
- value: "testing-right-now"
- }
- ]
- }
- ]
- }
- }))
-
- // Check if tasks were started
- if (!runResponse.tasks || runResponse.tasks.length === 0) {
- throw new Error("No tasks were started");
- }
-
- // Extract task details
- const task = runResponse.tasks[0];
- const taskArn = task?.taskArn!;
- const taskId = taskArn.split('/').pop()!; // Extract task ID from ARN
- const taskStatus = task?.lastStatus!;
-
- return {
- statusCode: 200,
- body: JSON.stringify({
- status: "sent",
- taskId: taskId,
- taskStatus: taskStatus,
- taskArn: taskArn
- }, null, 2),
- };
- } catch (err) {
- console.error("Error starting task:", err);
- return {
- statusCode: 500,
- body: JSON.stringify({ error: "Failed to start task" }, null, 2),
- };
-
- }
-};
\ No newline at end of file
diff --git a/cloud/packages/functions/src/realtime/subscriber.ts b/cloud/packages/functions/src/realtime/subscriber.ts
deleted file mode 100644
index 19ad96a2..00000000
--- a/cloud/packages/functions/src/realtime/subscriber.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export const handler = async (event: any) => {
- console.log(event);
- return "ok";
-};
\ No newline at end of file
diff --git a/cloud/packages/functions/src/subjects.ts b/cloud/packages/functions/src/subjects.ts
deleted file mode 100644
index c2bab322..00000000
--- a/cloud/packages/functions/src/subjects.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { z } from "zod"
-import { createSubjects } from "@openauthjs/openauth/subject"
-
-export const subjects = createSubjects({
- user: z.object({
- email: z.string(),
- userID: z.string(),
- })
-})
\ No newline at end of file
diff --git a/cloud/packages/functions/src/utils/patch-logger.ts b/cloud/packages/functions/src/utils/patch-logger.ts
deleted file mode 100644
index 0c451481..00000000
--- a/cloud/packages/functions/src/utils/patch-logger.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { format } from "util";
-
-/**
- * Overrides the default Node.js console logging methods with a custom logger.
- *
- * This function patches console.log, console.warn, console.error, console.trace, and console.debug so that each logs
- * messages prefixed with a log level. The messages are formatted using Node.js formatting conventions, with newline
- * characters replaced by carriage returns, and are written directly to standard output.
- *
- * @example
- * patchLogger();
- * console.info("Server started on port %d", 3000);
- */
-export function patchLogger() {
- const log =
- (level: "INFO" | "WARN" | "TRACE" | "DEBUG" | "ERROR") =>
- (msg: string, ...rest: any[]) => {
- let formattedMessage = format(msg, ...rest);
- // Split by newlines, prefix each line with the level, and join back
- const lines = formattedMessage.split('\n');
- const prefixedLines = lines.map(line => `${level}\t${line}`);
- const output = prefixedLines.join('\n');
- process.stdout.write(output + '\n');
- };
- console.log = log("INFO");
- console.warn = log("WARN");
- console.error = log("ERROR");
- console.trace = log("TRACE");
- console.debug = log("DEBUG");
-}
\ No newline at end of file
diff --git a/cloud/packages/functions/sst-env.d.ts b/cloud/packages/functions/sst-env.d.ts
deleted file mode 100644
index a544f67e..00000000
--- a/cloud/packages/functions/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/cloud/packages/functions/tsconfig.json b/cloud/packages/functions/tsconfig.json
deleted file mode 100644
index 7b53a409..00000000
--- a/cloud/packages/functions/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "extends": "@tsconfig/node20/tsconfig.json",
- "compilerOptions": {
- "module": "esnext",
- "jsx": "react-jsx",
- "moduleResolution": "bundler",
- "strict": true,
- "noUncheckedIndexedAccess": true,
- "types": ["@cloudflare/workers-types", "node"]
- }
-}
diff --git a/cloud/packages/maitred/go.mod b/cloud/packages/maitred/go.mod
deleted file mode 100644
index c9ffee88..00000000
--- a/cloud/packages/maitred/go.mod
+++ /dev/null
@@ -1,39 +0,0 @@
-module nestri/maitred
-
-go 1.24
-
-require (
- github.com/docker/docker v28.0.1+incompatible
- github.com/eclipse/paho.golang v0.22.0
- github.com/oklog/ulid/v2 v2.1.0
-)
-
-require (
- github.com/Microsoft/go-winio v0.4.14 // indirect
- github.com/containerd/log v0.1.0 // indirect
- github.com/distribution/reference v0.6.0 // indirect
- github.com/docker/go-connections v0.5.0 // indirect
- github.com/docker/go-units v0.5.0 // indirect
- github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/go-logr/logr v1.4.2 // indirect
- github.com/go-logr/stdr v1.2.2 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/gorilla/websocket v1.5.3 // indirect
- github.com/moby/docker-image-spec v1.3.1 // indirect
- github.com/moby/term v0.5.2 // indirect
- github.com/morikuni/aec v1.0.0 // indirect
- github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.1 // indirect
- github.com/pkg/errors v0.9.1 // indirect
- go.opentelemetry.io/auto/sdk v1.1.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
- go.opentelemetry.io/otel v1.34.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 // indirect
- go.opentelemetry.io/otel/metric v1.34.0 // indirect
- go.opentelemetry.io/otel/sdk v1.34.0 // indirect
- go.opentelemetry.io/otel/trace v1.34.0 // indirect
- golang.org/x/net v0.38.0 // indirect
- golang.org/x/sys v0.31.0 // indirect
- golang.org/x/time v0.10.0 // indirect
- gotest.tools/v3 v3.5.2 // indirect
-)
diff --git a/cloud/packages/maitred/go.sum b/cloud/packages/maitred/go.sum
deleted file mode 100644
index a9c8ed58..00000000
--- a/cloud/packages/maitred/go.sum
+++ /dev/null
@@ -1,134 +0,0 @@
-github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
-github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
-github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-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/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
-github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
-github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
-github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
-github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
-github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/eclipse/paho.golang v0.22.0 h1:JhhUngr8TBlyUZDZw/L6WVayPi9qmSmdWeki48i5AVE=
-github.com/eclipse/paho.golang v0.22.0/go.mod h1:9ZiYJ93iEfGRJri8tErNeStPKLXIGBHiqbHV74t5pqI=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-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/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
-github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ=
-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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
-github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
-github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
-github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
-github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
-github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU=
-github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
-github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
-github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
-github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
-github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.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/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
-github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
-go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
-go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 h1:BEj3SPM81McUZHYjRS5pEgNgnmzGJ5tRpU5krWnV8Bs=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0/go.mod h1:9cKLGBDzI/F3NoHLQGm4ZrYdIHsvGt6ej6hUowxY0J4=
-go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
-go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
-go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
-go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
-go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
-go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
-go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
-go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
-go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-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/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.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
-golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
-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/sys v0.0.0-20180905080454-ebe1bf3edb33/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
-golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
-golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
-golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
-golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-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/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/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA=
-google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:Ic02D47M+zbarjYYUlK57y316f2MoN0gjAwI3f2S95o=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
-google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
-google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
-google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
-google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
-gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
diff --git a/cloud/packages/maitred/internal/auth/auth.go b/cloud/packages/maitred/internal/auth/auth.go
deleted file mode 100644
index d0027ddc..00000000
--- a/cloud/packages/maitred/internal/auth/auth.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package auth
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "log/slog"
- "nestri/maitred/internal/resource"
- "net/http"
- "net/url"
-)
-
-type UserCredentials struct {
- AccessToken string `json:"access_token"`
- RefreshToken string `json:"refresh_token"`
-}
-
-func FetchUserToken(machineID string, resource *resource.Resource) (*UserCredentials, error) {
- data := url.Values{}
- data.Set("grant_type", "client_credentials")
- data.Set("client_id", "maitred")
- data.Set("client_secret", resource.AuthFingerprintKey.Value)
- data.Set("fingerprint", machineID)
- data.Set("provider", "machine")
- resp, err := http.PostForm(resource.Auth.Url+"/token", data)
- if err != nil {
- return nil, err
- }
- defer func(Body io.ReadCloser) {
- err = Body.Close()
- if err != nil {
- slog.Error("Error closing body", "err", err)
- }
- }(resp.Body)
- if resp.StatusCode != 200 {
- body, _ := io.ReadAll(resp.Body)
- return nil, fmt.Errorf("failed to auth: " + string(body))
- }
- credentials := UserCredentials{}
- err = json.NewDecoder(resp.Body).Decode(&credentials)
- if err != nil {
- return nil, err
- }
- return &credentials, nil
-}
diff --git a/cloud/packages/maitred/internal/containers/containers.go b/cloud/packages/maitred/internal/containers/containers.go
deleted file mode 100644
index 83a35567..00000000
--- a/cloud/packages/maitred/internal/containers/containers.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-)
-
-// Container represents a container instance
-type Container struct {
- ID string
- Name string
- State string
- Image string
-}
-
-// ContainerEngine defines the common interface for differing container engines
-type ContainerEngine interface {
- Close() error
- ListContainers(ctx context.Context) ([]Container, error)
- ListContainersByImage(ctx context.Context, img string) ([]Container, error)
- NewContainer(ctx context.Context, img string, envs []string) (string, error)
- StartContainer(ctx context.Context, id string) error
- StopContainer(ctx context.Context, id string) error
- RemoveContainer(ctx context.Context, id string) error
- InspectContainer(ctx context.Context, id string) (*Container, error)
- PullImage(ctx context.Context, img string) error
- Info(ctx context.Context) (string, error)
- LogsContainer(ctx context.Context, id string) (string, error)
-}
-
-func NewContainerEngine() (ContainerEngine, error) {
- dockerEngine, err := NewDockerEngine()
- if err == nil {
- return dockerEngine, nil
- }
-
- return nil, fmt.Errorf("failed to create container engine: %w", err)
-}
diff --git a/cloud/packages/maitred/internal/containers/docker.go b/cloud/packages/maitred/internal/containers/docker.go
deleted file mode 100644
index 3ede30bd..00000000
--- a/cloud/packages/maitred/internal/containers/docker.go
+++ /dev/null
@@ -1,299 +0,0 @@
-package containers
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "github.com/docker/docker/api/types/container"
- "github.com/docker/docker/api/types/image"
- "github.com/docker/docker/client"
- "io"
- "log/slog"
- "strings"
- "time"
-)
-
-// DockerEngine implements the ContainerEngine interface for Docker / Docker compatible engines
-type DockerEngine struct {
- cli *client.Client
-}
-
-func NewDockerEngine() (*DockerEngine, error) {
- cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
- if err != nil {
- return nil, fmt.Errorf("failed to create Docker client: %w", err)
- }
- return &DockerEngine{cli: cli}, nil
-}
-
-func (d *DockerEngine) Close() error {
- return d.cli.Close()
-}
-
-func (d *DockerEngine) ListContainers(ctx context.Context) ([]Container, error) {
- containerList, err := d.cli.ContainerList(ctx, container.ListOptions{})
- if err != nil {
- return nil, fmt.Errorf("failed to list containers: %w", err)
- }
-
- var result []Container
- for _, c := range containerList {
- result = append(result, Container{
- ID: c.ID,
- Name: strings.TrimPrefix(strings.Join(c.Names, ","), "/"),
- State: c.State,
- Image: c.Image,
- })
- }
- return result, nil
-}
-
-func (d *DockerEngine) ListContainersByImage(ctx context.Context, img string) ([]Container, error) {
- if len(img) <= 0 {
- return nil, fmt.Errorf("image name cannot be empty")
- }
-
- containerList, err := d.cli.ContainerList(ctx, container.ListOptions{})
- if err != nil {
- return nil, fmt.Errorf("failed to list containers: %w", err)
- }
-
- var result []Container
- for _, c := range containerList {
- if c.Image == img {
- result = append(result, Container{
- ID: c.ID,
- Name: strings.TrimPrefix(strings.Join(c.Names, ","), "/"),
- State: c.State,
- Image: c.Image,
- })
- }
- }
- return result, nil
-}
-
-func (d *DockerEngine) NewContainer(ctx context.Context, img string, envs []string) (string, error) {
- // Create a new container with the given image and environment variables
- resp, err := d.cli.ContainerCreate(ctx, &container.Config{
- Image: img,
- Env: envs,
- }, &container.HostConfig{
- NetworkMode: "host",
- }, nil, nil, "")
- if err != nil {
- return "", fmt.Errorf("failed to create container: %w", err)
- }
-
- if len(resp.ID) <= 0 {
- return "", fmt.Errorf("failed to create container, no ID returned")
- }
-
- return resp.ID, nil
-}
-
-func (d *DockerEngine) StartContainer(ctx context.Context, id string) error {
- err := d.cli.ContainerStart(ctx, id, container.StartOptions{})
- if err != nil {
- return fmt.Errorf("failed to start container: %w", err)
- }
-
- // Wait for the container to start
- if err = d.waitForContainer(ctx, id, "running"); err != nil {
- return fmt.Errorf("container failed to reach running state: %w", err)
- }
-
- return nil
-}
-
-func (d *DockerEngine) StopContainer(ctx context.Context, id string) error {
- // Waiter for the container to stop
- respChan, errChan := d.cli.ContainerWait(ctx, id, container.WaitConditionNotRunning)
-
- // Stop the container
- err := d.cli.ContainerStop(ctx, id, container.StopOptions{})
- if err != nil {
- return fmt.Errorf("failed to stop container: %w", err)
- }
-
- select {
- case <-respChan:
- // Container stopped successfully
- break
- case err = <-errChan:
- if err != nil {
- return fmt.Errorf("failed to wait for container to stop: %w", err)
- }
- case <-ctx.Done():
- return fmt.Errorf("context canceled while waiting for container to stop")
- }
- return nil
-}
-
-func (d *DockerEngine) RemoveContainer(ctx context.Context, id string) error {
- // Waiter for the container to be removed
- respChan, errChan := d.cli.ContainerWait(ctx, id, container.WaitConditionRemoved)
-
- err := d.cli.ContainerRemove(ctx, id, container.RemoveOptions{})
- if err != nil {
- return fmt.Errorf("failed to remove container: %w", err)
- }
-
- select {
- case <-respChan:
- // Container removed successfully
- break
- case err = <-errChan:
- if err != nil {
- return fmt.Errorf("failed to wait for container to be removed: %w", err)
- }
- case <-ctx.Done():
- return fmt.Errorf("context canceled while waiting for container to stop")
- }
- return nil
-}
-
-func (d *DockerEngine) InspectContainer(ctx context.Context, id string) (*Container, error) {
- info, err := d.cli.ContainerInspect(ctx, id)
- if err != nil {
- return nil, fmt.Errorf("failed to inspect container: %w", err)
- }
-
- return &Container{
- ID: info.ID,
- Name: info.Name,
- State: info.State.Status,
- Image: info.Config.Image,
- }, nil
-}
-
-func (d *DockerEngine) PullImage(ctx context.Context, img string) error {
- if len(img) <= 0 {
- return fmt.Errorf("image name cannot be empty")
- }
-
- slog.Info("Starting image pull", "image", img)
-
- reader, err := d.cli.ImagePull(ctx, img, image.PullOptions{})
- if err != nil {
- return fmt.Errorf("failed to start image pull for %s: %w", img, err)
- }
- defer func(reader io.ReadCloser) {
- err = reader.Close()
- if err != nil {
- slog.Warn("Failed to close reader", "err", err)
- }
- }(reader)
-
- // Parse the JSON stream for progress
- decoder := json.NewDecoder(reader)
- lastDownloadPercent := 0
- downloadTotals := make(map[string]int64)
- downloadCurrents := make(map[string]int64)
-
- var msg struct {
- ID string `json:"id"`
- Status string `json:"status"`
- ProgressDetail struct {
- Current int64 `json:"current"`
- Total int64 `json:"total"`
- } `json:"progressDetail"`
- }
-
- for {
- err = decoder.Decode(&msg)
- if err == io.EOF {
- break // Pull completed
- }
- if err != nil {
- return fmt.Errorf("error decoding pull response for %s: %w", img, err)
- }
-
- // Skip if no progress details or ID
- if msg.ID == "" || msg.ProgressDetail.Total == 0 {
- continue
- }
-
- if strings.Contains(strings.ToLower(msg.Status), "downloading") {
- downloadTotals[msg.ID] = msg.ProgressDetail.Total
- downloadCurrents[msg.ID] = msg.ProgressDetail.Current
- var total, current int64
- for _, t := range downloadTotals {
- total += t
- }
- for _, c := range downloadCurrents {
- current += c
- }
- percent := int((float64(current) / float64(total)) * 100)
- if percent >= lastDownloadPercent+10 && percent <= 100 {
- slog.Info("Download progress", "image", img, "percent", percent)
- lastDownloadPercent = percent - (percent % 10)
- }
- }
- }
-
- slog.Info("Pulled image", "image", img)
-
- return nil
-}
-
-func (d *DockerEngine) Info(ctx context.Context) (string, error) {
- info, err := d.cli.Info(ctx)
- if err != nil {
- return "", fmt.Errorf("failed to get Docker info: %w", err)
- }
-
- return fmt.Sprintf("Docker Engine Version: %s", info.ServerVersion), nil
-}
-
-func (d *DockerEngine) LogsContainer(ctx context.Context, id string) (string, error) {
- reader, err := d.cli.ContainerLogs(ctx, id, container.LogsOptions{ShowStdout: true, ShowStderr: true})
- if err != nil {
- return "", fmt.Errorf("failed to get container logs: %w", err)
- }
- defer func(reader io.ReadCloser) {
- err = reader.Close()
- if err != nil {
- slog.Warn("Failed to close reader", "err", err)
- }
- }(reader)
-
- logs, err := io.ReadAll(reader)
- if err != nil {
- return "", fmt.Errorf("failed to read container logs: %w", err)
- }
-
- return string(logs), nil
-}
-
-func (d *DockerEngine) waitForContainer(ctx context.Context, id, desiredState string) error {
- ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
- defer cancel()
-
- for {
- // Inspect the container to get its current state
- inspection, err := d.cli.ContainerInspect(ctx, id)
- if err != nil {
- return fmt.Errorf("failed to inspect container: %w", err)
- }
-
- // Check the container's state
- currentState := strings.ToLower(inspection.State.Status)
- switch currentState {
- case desiredState:
- // Container is in the desired state (e.g., "running")
- return nil
- case "exited", "dead", "removing":
- // Container failed or stopped unexpectedly, get logs and return error
- logs, _ := d.LogsContainer(ctx, id)
- return fmt.Errorf("container failed to reach %s state, logs: %s", desiredState, logs)
- }
-
- // Wait before polling again
- select {
- case <-ctx.Done():
- return fmt.Errorf("timed out after 10s waiting for container to reach %s state", desiredState)
- case <-time.After(1 * time.Second):
- // Continue polling
- }
- }
-}
diff --git a/cloud/packages/maitred/internal/flags.go b/cloud/packages/maitred/internal/flags.go
deleted file mode 100644
index e206ece8..00000000
--- a/cloud/packages/maitred/internal/flags.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package internal
-
-import (
- "flag"
- "log/slog"
- "os"
- "strconv"
-)
-
-var globalFlags *Flags
-
-type Flags struct {
- Verbose bool // Log everything to console
- Debug bool // Enable debug mode, implies Verbose - disables SST and MQTT connections
- NoMonitor bool // Disable system monitoring
-}
-
-func (flags *Flags) DebugLog() {
- slog.Info("Maitred flags",
- "verbose", flags.Verbose,
- "debug", flags.Debug,
- "no-monitor", flags.NoMonitor,
- )
-}
-
-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.Verbose, "verbose", getEnvAsBool("VERBOSE", false), "Verbose mode")
- flag.BoolVar(&globalFlags.Debug, "debug", getEnvAsBool("DEBUG", false), "Debug mode")
- flag.BoolVar(&globalFlags.NoMonitor, "no-monitor", getEnvAsBool("NO_MONITOR", false), "Disable system monitoring")
- // Parse flags
- flag.Parse()
-
- // If debug is enabled, verbose is also enabled
- if globalFlags.Debug {
- globalFlags.Verbose = true
- }
-}
-
-func GetFlags() *Flags {
- return globalFlags
-}
diff --git a/cloud/packages/maitred/internal/handler.go b/cloud/packages/maitred/internal/handler.go
deleted file mode 100644
index 214a490d..00000000
--- a/cloud/packages/maitred/internal/handler.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package internal
-
-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/cloud/packages/maitred/internal/realtime/managed.go b/cloud/packages/maitred/internal/realtime/managed.go
deleted file mode 100644
index 68bbf868..00000000
--- a/cloud/packages/maitred/internal/realtime/managed.go
+++ /dev/null
@@ -1,366 +0,0 @@
-package realtime
-
-import (
- "context"
- "fmt"
- "log/slog"
- "nestri/maitred/internal"
- "nestri/maitred/internal/containers"
- "strings"
- "sync"
- "time"
-)
-
-var (
- nestriRunnerImage = "ghcr.io/nestrilabs/nestri/runner:nightly"
- nestriRelayImage = "ghcr.io/nestrilabs/nestri/relay:nightly"
-)
-
-type ManagedContainerType int
-
-const (
- // Runner is the nestri runner container
- Runner ManagedContainerType = iota
- // Relay is the nestri relay container
- Relay
-)
-
-// ManagedContainer type with extra information fields
-type ManagedContainer struct {
- containers.Container
- Type ManagedContainerType
-}
-
-// managedContainers is a map of containers that are managed by us (maitred)
-var (
- managedContainers = make(map[string]ManagedContainer)
- managedContainersMutex sync.RWMutex
-)
-
-// InitializeManager handles the initialization of the managed containers and pulls their latest images
-func InitializeManager(ctx context.Context, ctrEngine containers.ContainerEngine) error {
- // If debug, override the images
- if internal.GetFlags().Debug {
- nestriRunnerImage = "ghcr.io/datcaptainhorse/nestri-cachyos:latest-v3"
- nestriRelayImage = "ghcr.io/datcaptainhorse/nestri-relay:latest"
- }
-
- // Look for existing stopped runner containers and remove them
- slog.Info("Checking and removing old runner containers")
- oldRunners, err := ctrEngine.ListContainersByImage(ctx, nestriRunnerImage)
- if err != nil {
- return err
- }
- for _, c := range oldRunners {
- // If running, stop first
- if strings.Contains(strings.ToLower(c.State), "running") {
- slog.Info("Stopping old runner container", "id", c.ID)
- if err = ctrEngine.StopContainer(ctx, c.ID); err != nil {
- return err
- }
- }
- slog.Info("Removing old runner container", "id", c.ID)
- if err = ctrEngine.RemoveContainer(ctx, c.ID); err != nil {
- return err
- }
- }
-
- // Pull the runner image if not in debug mode
- if !internal.GetFlags().Debug {
- slog.Info("Pulling runner image", "image", nestriRunnerImage)
- if err := ctrEngine.PullImage(ctx, nestriRunnerImage); err != nil {
- return fmt.Errorf("failed to pull runner image: %w", err)
- }
- }
-
- // Look for existing stopped relay containers and remove them
- slog.Info("Checking and removing old relay containers")
- oldRelays, err := ctrEngine.ListContainersByImage(ctx, nestriRelayImage)
- if err != nil {
- return err
- }
- for _, c := range oldRelays {
- // If running, stop first
- if strings.Contains(strings.ToLower(c.State), "running") {
- slog.Info("Stopping old relay container", "id", c.ID)
- if err = ctrEngine.StopContainer(ctx, c.ID); err != nil {
- return err
- }
- }
- slog.Info("Removing old relay container", "id", c.ID)
- if err = ctrEngine.RemoveContainer(ctx, c.ID); err != nil {
- return err
- }
- }
-
- // Pull the relay image if not in debug mode
- if !internal.GetFlags().Debug {
- slog.Info("Pulling relay image", "image", nestriRelayImage)
- if err := ctrEngine.PullImage(ctx, nestriRelayImage); err != nil {
- return fmt.Errorf("failed to pull relay image: %w", err)
- }
- }
-
- return nil
-}
-
-// CreateRunner creates a new runner image container
-func CreateRunner(ctx context.Context, ctrEngine containers.ContainerEngine) (string, error) {
- // For safety, limit to 4 runners
- if CountRunners() >= 4 {
- return "", fmt.Errorf("maximum number of runners reached")
- }
-
- // Create the container
- containerID, err := ctrEngine.NewContainer(ctx, nestriRunnerImage, nil)
- if err != nil {
- return "", err
- }
-
- // Add the container to the managed list
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- managedContainers[containerID] = ManagedContainer{
- Container: containers.Container{
- ID: containerID,
- },
- Type: Runner,
- }
-
- return containerID, nil
-}
-
-// StartRunner starts a runner container, keeping track of it's state
-func StartRunner(ctx context.Context, ctrEngine containers.ContainerEngine, id string) error {
- // Verify the container is part of the managed list
- managedContainersMutex.RLock()
- if _, ok := managedContainers[id]; !ok {
- managedContainersMutex.RUnlock()
- return fmt.Errorf("container %s is not managed", id)
- }
- managedContainersMutex.RUnlock()
-
- // Start the container
- if err := ctrEngine.StartContainer(ctx, id); err != nil {
- return err
- }
-
- // Check container status in background at 10 second intervals, if it exits print it's logs
- go func() {
- err := monitorContainer(ctx, ctrEngine, id)
- if err != nil {
- slog.Error("failure while monitoring runner container", "id", id, "err", err)
- return
- }
- }()
-
- return nil
-}
-
-// RemoveRunner removes a runner container
-func RemoveRunner(ctx context.Context, ctrEngine containers.ContainerEngine, id string) error {
- // Stop the container if it's running
- if strings.Contains(strings.ToLower(managedContainers[id].State), "running") {
- if err := ctrEngine.StopContainer(ctx, id); err != nil {
- return err
- }
- }
-
- // Remove the container
- if err := ctrEngine.RemoveContainer(ctx, id); err != nil {
- return err
- }
-
- // Remove the container from the managed list
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- delete(managedContainers, id)
-
- return nil
-}
-
-// ListRunners returns a list of all runner containers
-func ListRunners() []ManagedContainer {
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- var runners []ManagedContainer
- for _, v := range managedContainers {
- if v.Type == Runner {
- runners = append(runners, v)
- }
- }
- return runners
-}
-
-// CountRunners returns the number of runner containers
-func CountRunners() int {
- return len(ListRunners())
-}
-
-// CreateRelay creates a new relay image container
-func CreateRelay(ctx context.Context, ctrEngine containers.ContainerEngine) (string, error) {
- // Limit to 1 relay
- if CountRelays() >= 1 {
- return "", fmt.Errorf("maximum number of relays reached")
- }
-
- // TODO: Placeholder for control secret, should be generated at runtime
- secretEnv := fmt.Sprintf("CONTROL_SECRET=%s", "1234")
-
- // Create the container
- containerID, err := ctrEngine.NewContainer(ctx, nestriRelayImage, []string{secretEnv})
- if err != nil {
- return "", err
- }
-
- // Add the container to the managed list
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- managedContainers[containerID] = ManagedContainer{
- Container: containers.Container{
- ID: containerID,
- },
- Type: Relay,
- }
-
- return containerID, nil
-}
-
-// StartRelay starts a relay container, keeping track of it's state
-func StartRelay(ctx context.Context, ctrEngine containers.ContainerEngine, id string) error {
- // Verify the container is part of the managed list
- managedContainersMutex.RLock()
- if _, ok := managedContainers[id]; !ok {
- managedContainersMutex.RUnlock()
- return fmt.Errorf("container %s is not managed", id)
- }
- managedContainersMutex.RUnlock()
-
- // Start the container
- if err := ctrEngine.StartContainer(ctx, id); err != nil {
- return err
- }
-
- // Check container status in background at 10 second intervals, if it exits print it's logs
- go func() {
- err := monitorContainer(ctx, ctrEngine, id)
- if err != nil {
- slog.Error("failure while monitoring relay container", "id", id, "err", err)
- return
- }
- }()
-
- return nil
-}
-
-// RemoveRelay removes a relay container
-func RemoveRelay(ctx context.Context, ctrEngine containers.ContainerEngine, id string) error {
- // Stop the container if it's running
- if strings.Contains(strings.ToLower(managedContainers[id].State), "running") {
- if err := ctrEngine.StopContainer(ctx, id); err != nil {
- return err
- }
- }
-
- // Remove the container
- if err := ctrEngine.RemoveContainer(ctx, id); err != nil {
- return err
- }
-
- // Remove the container from the managed list
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- delete(managedContainers, id)
-
- return nil
-}
-
-// ListRelays returns a list of all relay containers
-func ListRelays() []ManagedContainer {
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- var relays []ManagedContainer
- for _, v := range managedContainers {
- if v.Type == Relay {
- relays = append(relays, v)
- }
- }
- return relays
-}
-
-// CountRelays returns the number of relay containers
-func CountRelays() int {
- return len(ListRelays())
-}
-
-// CleanupManaged stops and removes all managed containers
-func CleanupManaged(ctx context.Context, ctrEngine containers.ContainerEngine) error {
- if len(managedContainers) <= 0 {
- return nil
- }
-
- slog.Info("Cleaning up managed containers")
- managedContainersMutex.Lock()
- defer managedContainersMutex.Unlock()
- for id := range managedContainers {
- // If running, stop first
- if strings.Contains(strings.ToLower(managedContainers[id].State), "running") {
- slog.Info("Stopping managed container", "id", id)
- if err := ctrEngine.StopContainer(ctx, id); err != nil {
- return err
- }
- }
-
- // Remove the container
- slog.Info("Removing managed container", "id", id)
- if err := ctrEngine.RemoveContainer(ctx, id); err != nil {
- return err
- }
- // Remove from the managed list
- delete(managedContainers, id)
- }
- return nil
-}
-
-func monitorContainer(ctx context.Context, ctrEngine containers.ContainerEngine, id string) error {
- for {
- select {
- case <-ctx.Done():
- return nil
- default:
- // Check the container status
- ctr, err := ctrEngine.InspectContainer(ctx, id)
- if err != nil {
- return fmt.Errorf("failed to inspect container: %w", err)
- }
-
- // Update the container state in the managed list
- managedContainersMutex.Lock()
- managedContainers[id] = ManagedContainer{
- Container: containers.Container{
- ID: ctr.ID,
- Name: ctr.Name,
- State: ctr.State,
- Image: ctr.Image,
- },
- Type: Relay,
- }
- managedContainersMutex.Unlock()
-
- if !strings.Contains(strings.ToLower(ctr.State), "running") {
- // Container is not running, print logs
- logs, err := ctrEngine.LogsContainer(ctx, id)
- if err != nil {
- return fmt.Errorf("failed to get container logs: %w", err)
- }
- return fmt.Errorf("container %s stopped running: %s", id, logs)
- }
- }
- // Sleep for 10 seconds
- select {
- case <-ctx.Done():
- return nil
- case <-time.After(10 * time.Second):
- }
- }
-}
diff --git a/cloud/packages/maitred/internal/realtime/messages.go b/cloud/packages/maitred/internal/realtime/messages.go
deleted file mode 100644
index 72433608..00000000
--- a/cloud/packages/maitred/internal/realtime/messages.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package realtime
-
-import (
- "encoding/json"
-)
-
-// BaseMessage is the generic top-level message structure
-type BaseMessage struct {
- Type string `json:"type"`
- Payload json.RawMessage `json:"payload"`
-}
-
-type CreatePayload struct{}
-
-type StartPayload struct {
- ContainerID string `json:"container_id"`
-}
-
-type StopPayload struct {
- ContainerID string `json:"container_id"`
-}
-
-// ParseMessage parses a BaseMessage and returns the specific payload
-func ParseMessage(data []byte) (BaseMessage, interface{}, error) {
- var base BaseMessage
- if err := json.Unmarshal(data, &base); err != nil {
- return base, nil, err
- }
-
- switch base.Type {
- case "create":
- var payload CreatePayload
- if err := json.Unmarshal(base.Payload, &payload); err != nil {
- return base, nil, err
- }
- return base, payload, nil
- case "start":
- var payload StartPayload
- if err := json.Unmarshal(base.Payload, &payload); err != nil {
- return base, nil, err
- }
- return base, payload, nil
- case "stop":
- var payload StopPayload
- if err := json.Unmarshal(base.Payload, &payload); err != nil {
- return base, nil, err
- }
- return base, payload, nil
- default:
- return base, base.Payload, nil
- }
-}
diff --git a/cloud/packages/maitred/internal/realtime/realtime.go b/cloud/packages/maitred/internal/realtime/realtime.go
deleted file mode 100644
index bf314e38..00000000
--- a/cloud/packages/maitred/internal/realtime/realtime.go
+++ /dev/null
@@ -1,182 +0,0 @@
-package realtime
-
-import (
- "context"
- "fmt"
- "github.com/eclipse/paho.golang/autopaho"
- "github.com/eclipse/paho.golang/paho"
- "log/slog"
- "nestri/maitred/internal/auth"
- "nestri/maitred/internal/containers"
- "nestri/maitred/internal/resource"
- "net/url"
- "os"
- "time"
-)
-
-func Run(ctx context.Context, machineID string, containerEngine containers.ContainerEngine, resource *resource.Resource) error {
- var clientID = generateClientID()
- var topic = fmt.Sprintf("%s/%s/%s", resource.App.Name, resource.App.Stage, machineID)
- var serverURL = fmt.Sprintf("wss://%s/mqtt?x-amz-customauthorizer-name=%s", resource.Realtime.Endpoint, resource.Realtime.Authorizer)
-
- slog.Info("Realtime", "topic", topic)
-
- userTokens, err := auth.FetchUserToken(machineID, resource)
- if err != nil {
- return err
- }
-
- slog.Info("Realtime", "token", userTokens.AccessToken)
-
- u, err := url.Parse(serverURL)
- if err != nil {
- return err
- }
-
- router := paho.NewStandardRouter()
- router.DefaultHandler(func(p *paho.Publish) {
- slog.Debug("DefaultHandler", "topic", p.Topic, "message", fmt.Sprintf("default handler received message: %s - with topic: %s", p.Payload, p.Topic))
- })
-
- createTopic := fmt.Sprintf("%s/create", topic)
- slog.Debug("Registering handler", "topic", createTopic)
- router.RegisterHandler(createTopic, func(p *paho.Publish) {
- slog.Debug("Router", "message", "received create message with payload", fmt.Sprintf("%s", p.Payload))
-
- base, _, err := ParseMessage(p.Payload)
- if err != nil {
- slog.Error("Router", "err", fmt.Sprintf("failed to parse message: %s", err))
- return
- }
-
- if base.Type != "create" {
- slog.Error("Router", "err", "unexpected message type")
- return
- }
-
- // Create runner container
- containerID, err := CreateRunner(ctx, containerEngine)
- if err != nil {
- slog.Error("Router", "err", fmt.Sprintf("failed to create runner container: %s", err))
- return
- }
-
- slog.Info("Router", "info", fmt.Sprintf("created runner container: %s", containerID))
- })
-
- startTopic := fmt.Sprintf("%s/start", topic)
- slog.Debug("Registering handler", "topic", startTopic)
- router.RegisterHandler(startTopic, func(p *paho.Publish) {
- slog.Debug("Router", "message", "received start message with payload", fmt.Sprintf("%s", p.Payload))
-
- base, payload, err := ParseMessage(p.Payload)
- if err != nil {
- slog.Error("Router", "err", fmt.Sprintf("failed to parse message: %s", err))
- return
- }
-
- if base.Type != "start" {
- slog.Error("Router", "err", "unexpected message type")
- return
- }
-
- // Get container ID
- startPayload, ok := payload.(StartPayload)
- if !ok {
- slog.Error("Router", "err", "failed to get payload")
- return
- }
-
- // Start runner container
- if err = containerEngine.StartContainer(ctx, startPayload.ContainerID); err != nil {
- slog.Error("Router", "err", fmt.Sprintf("failed to start runner container: %s", err))
- return
- }
-
- slog.Info("Router", "info", fmt.Sprintf("started runner container: %s", startPayload.ContainerID))
- })
-
- stopTopic := fmt.Sprintf("%s/stop", topic)
- slog.Debug("Registering handler", "topic", stopTopic)
- router.RegisterHandler(stopTopic, func(p *paho.Publish) {
- slog.Debug("Router", "message", "received stop message with payload", fmt.Sprintf("%s", p.Payload))
-
- base, payload, err := ParseMessage(p.Payload)
- if err != nil {
- slog.Error("Router", "err", fmt.Sprintf("failed to parse message: %s", err))
- return
- }
-
- if base.Type != "stop" {
- slog.Error("Router", "err", "unexpected message type")
- return
- }
-
- // Get container ID
- stopPayload, ok := payload.(StopPayload)
- if !ok {
- slog.Error("Router", "err", "failed to get payload")
- return
- }
-
- // Stop runner container
- if err = containerEngine.StopContainer(ctx, stopPayload.ContainerID); err != nil {
- slog.Error("Router", "err", fmt.Sprintf("failed to stop runner container: %s", err))
- return
- }
-
- slog.Info("Router", "info", fmt.Sprintf("stopped runner container: %s", stopPayload.ContainerID))
- })
-
- legacyLogger := slog.NewLogLogger(slog.NewTextHandler(os.Stdout, nil), slog.LevelError)
- cliCfg := autopaho.ClientConfig{
- ServerUrls: []*url.URL{u},
- ConnectUsername: "",
- ConnectPassword: []byte(userTokens.AccessToken),
- KeepAlive: 20,
- CleanStartOnInitialConnection: true,
- SessionExpiryInterval: 60,
- ReconnectBackoff: autopaho.NewConstantBackoff(time.Second),
- OnConnectionUp: func(cm *autopaho.ConnectionManager, connAck *paho.Connack) {
- slog.Info("Router", "info", "MQTT connection is up and running")
- if _, err = cm.Subscribe(context.Background(), &paho.Subscribe{
- Subscriptions: []paho.SubscribeOptions{
- {Topic: fmt.Sprintf("%s/#", topic), QoS: 1},
- },
- }); err != nil {
- slog.Error("Router", "err", fmt.Sprint("failed to subscribe, likely no messages will be received: ", err))
- }
- },
- Errors: legacyLogger,
- OnConnectError: func(err error) {
- slog.Error("Router", "err", fmt.Sprintf("error whilst attempting connection: %s", err))
- },
- ClientConfig: paho.ClientConfig{
- ClientID: clientID,
- OnPublishReceived: []func(paho.PublishReceived) (bool, error){
- func(pr paho.PublishReceived) (bool, error) {
- router.Route(pr.Packet.Packet())
- return true, nil
- }},
- OnClientError: func(err error) { slog.Error("Router", "err", fmt.Sprintf("client error: %s", err)) },
- OnServerDisconnect: func(d *paho.Disconnect) {
- if d.Properties != nil {
- slog.Info("Router", "info", fmt.Sprintf("server requested disconnect: %s", d.Properties.ReasonString))
- } else {
- slog.Info("Router", "info", fmt.Sprintf("server requested disconnect; reason code: %d", d.ReasonCode))
- }
- },
- },
- }
-
- c, err := autopaho.NewConnection(ctx, cliCfg)
- if err != nil {
- return err
- }
-
- if err = c.AwaitConnection(ctx); err != nil {
- return err
- }
-
- return nil
-}
diff --git a/cloud/packages/maitred/internal/realtime/utils.go b/cloud/packages/maitred/internal/realtime/utils.go
deleted file mode 100644
index d22f8e9d..00000000
--- a/cloud/packages/maitred/internal/realtime/utils.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package realtime
-
-import (
- "crypto/rand"
- "fmt"
- "github.com/oklog/ulid/v2"
- "time"
-)
-
-func generateClientID() string {
- // Create a source of entropy (cryptographically secure)
- entropy := ulid.Monotonic(rand.Reader, 0)
- // Generate a new ULID
- id := ulid.MustNew(ulid.Timestamp(time.Now()), entropy)
- // Create the client ID string
- return fmt.Sprintf("mch_%s", id.String())
-}
diff --git a/cloud/packages/maitred/internal/resource/resource.go b/cloud/packages/maitred/internal/resource/resource.go
deleted file mode 100644
index 9984cf3b..00000000
--- a/cloud/packages/maitred/internal/resource/resource.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package resource
-
-import (
- "encoding/json"
- "fmt"
- "os"
- "reflect"
-)
-
-type Resource struct {
- Api struct {
- Url string `json:"url"`
- }
- Auth struct {
- Url string `json:"url"`
- }
- /*AuthFingerprintKey struct {
- Value string `json:"value"`
- }*/
- Realtime struct {
- Endpoint string `json:"endpoint"`
- Authorizer string `json:"authorizer"`
- }
- App struct {
- Name string `json:"name"`
- Stage string `json:"stage"`
- }
-}
-
-func NewResource() (*Resource, error) {
- resource := Resource{}
- val := reflect.ValueOf(&resource).Elem()
- for i := 0; i < val.NumField(); i++ {
- field := val.Field(i)
- typeField := val.Type().Field(i)
- envVarName := fmt.Sprintf("SST_RESOURCE_%s", typeField.Name)
- envValue, exists := os.LookupEnv(envVarName)
- if !exists {
- return nil, fmt.Errorf("missing environment variable %s", envVarName)
- }
- if err := json.Unmarshal([]byte(envValue), field.Addr().Interface()); err != nil {
- return nil, fmt.Errorf("error unmarshalling %s: %w", envVarName, err)
- }
- }
- return &resource, nil
-}
diff --git a/cloud/packages/maitred/internal/system/gpu.go b/cloud/packages/maitred/internal/system/gpu.go
deleted file mode 100644
index ba38f1f5..00000000
--- a/cloud/packages/maitred/internal/system/gpu.go
+++ /dev/null
@@ -1,184 +0,0 @@
-package system
-
-import (
- "bytes"
- "errors"
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- "strconv"
- "strings"
-)
-
-const (
- pciClassVGA = 0x0300 // VGA compatible controller
- pciClass3D = 0x0302 // 3D controller
- pciClassDisplay = 0x0380 // Display controller
- pciClassCoProcessor = 0x0b40 // Co-processor (e.g., NVIDIA Tesla)
-)
-
-type infoPair struct {
- Name string
- ID int
-}
-
-type PCIInfo struct {
- Slot string
- Class infoPair
- Vendor infoPair
- Device infoPair
- SVendor infoPair
- SDevice infoPair
- Rev string
- ProgIf string
- Driver string
- Modules []string
- IOMMUGroup string
-}
-
-const (
- VendorIntel = 0x8086
- VendorNVIDIA = 0x10de
- VendorAMD = 0x1002
-)
-
-func GetAllGPUInfo() ([]PCIInfo, error) {
- var gpus []PCIInfo
-
- cmd := exec.Command("lspci", "-mmvvvnnkD")
- output, err := cmd.Output()
- if err != nil {
- return nil, err
- }
-
- sections := bytes.Split(output, []byte("\n\n"))
- for _, section := range sections {
- var info PCIInfo
-
- lines := bytes.Split(section, []byte("\n"))
- for _, line := range lines {
- parts := bytes.SplitN(line, []byte(":"), 2)
- if len(parts) < 2 {
- continue
- }
-
- key := strings.TrimSpace(string(parts[0]))
- value := strings.TrimSpace(string(parts[1]))
-
- switch key {
- case "Slot":
- info.Slot = value
- case "Class":
- info.Class, err = parseInfoPair(value)
- case "Vendor":
- info.Vendor, err = parseInfoPair(value)
- case "Device":
- info.Device, err = parseInfoPair(value)
- case "SVendor":
- info.SVendor, err = parseInfoPair(value)
- case "SDevice":
- info.SDevice, err = parseInfoPair(value)
- case "Rev":
- info.Rev = value
- case "ProgIf":
- info.ProgIf = value
- case "Driver":
- info.Driver = value
- case "Module":
- info.Modules = append(info.Modules, value)
- case "IOMMUGroup":
- info.IOMMUGroup = value
- }
-
- if err != nil {
- return nil, err
- }
- }
-
- // Check if this is a GPU device
- if isGPUClass(info.Class.ID) {
- gpus = append(gpus, info)
- }
- }
-
- return gpus, nil
-}
-
-// gets infoPair from "SomeName [SomeID]"
-// example: "DG2 [Arc A770] [56a0]" -> Name: "DG2 [Arc A770]", ID: "56a0"
-func parseInfoPair(pair string) (infoPair, error) {
- parts := strings.Split(pair, "[")
- if len(parts) < 2 {
- return infoPair{}, errors.New("invalid info pair")
- }
-
- id := strings.TrimSuffix(parts[len(parts)-1], "]")
- name := strings.TrimSuffix(pair, "["+id)
- name = strings.TrimSpace(name)
- id = strings.TrimSpace(id)
-
- // Remove ID including square brackets from name
- name = strings.ReplaceAll(name, "["+id+"]", "")
- name = strings.TrimSpace(name)
-
- idHex, err := parseHexID(id)
- if err != nil {
- return infoPair{}, err
- }
-
- return infoPair{
- Name: name,
- ID: idHex,
- }, nil
-}
-
-func parseHexID(id string) (int, error) {
- if strings.HasPrefix(id, "0x") {
- id = id[2:]
- }
- parsed, err := strconv.ParseInt(id, 16, 32)
- if err != nil {
- return 0, err
- }
- return int(parsed), nil
-}
-
-func isGPUClass(class int) bool {
- return class == pciClassVGA || class == pciClass3D || class == pciClassDisplay || class == pciClassCoProcessor
-}
-
-// GetCardDevices returns the /dev/dri/cardX and /dev/dri/renderDXXX device
-func (info PCIInfo) GetCardDevices() (cardPath, renderPath string, err error) {
- busID := strings.ToLower(info.Slot)
- if !strings.HasPrefix(busID, "0000:") || len(busID) != 12 || busID[4] != ':' || busID[7] != ':' || busID[10] != '.' {
- return "", "", fmt.Errorf("invalid PCI Bus ID format: %s (expected 0000:XX:YY.Z)", busID)
- }
-
- byPathDir := "/dev/dri/by-path/"
- entries, err := os.ReadDir(byPathDir)
- if err != nil {
- return "", "", fmt.Errorf("failed to read %s: %v", byPathDir, err)
- }
-
- for _, entry := range entries {
- name := entry.Name()
- if strings.HasPrefix(name, "pci-"+busID+"-card") {
- cardPath, err = filepath.EvalSymlinks(filepath.Join(byPathDir, name))
- if err != nil {
- return "", "", fmt.Errorf("failed to resolve card symlink %s: %v", name, err)
- }
- }
- if strings.HasPrefix(name, "pci-"+busID+"-render") {
- renderPath, err = filepath.EvalSymlinks(filepath.Join(byPathDir, name))
- if err != nil {
- return "", "", fmt.Errorf("failed to resolve render symlink %s: %v", name, err)
- }
- }
- }
-
- if cardPath == "" && renderPath == "" {
- return "", "", fmt.Errorf("no DRM devices found for PCI Bus ID: %s", busID)
- }
- return cardPath, renderPath, nil
-}
diff --git a/cloud/packages/maitred/internal/system/gpu_intel.go b/cloud/packages/maitred/internal/system/gpu_intel.go
deleted file mode 100644
index 906df21f..00000000
--- a/cloud/packages/maitred/internal/system/gpu_intel.go
+++ /dev/null
@@ -1,290 +0,0 @@
-package system
-
-import (
- "bufio"
- "fmt"
- "log/slog"
- "os"
- "path/filepath"
- "strconv"
- "strings"
- "syscall"
- "time"
- "unsafe"
-)
-
-// FDInfo holds parsed fdinfo data
-type FDInfo struct {
- ClientID string
- EngineTime uint64 // i915: "drm-engine-render" in ns
- Cycles uint64 // Xe: "drm-cycles-rcs"
- TotalCycles uint64 // Xe: "drm-total-cycles-rcs"
- MemoryVRAM uint64 // i915: "drm-memory-vram", Xe: "drm-total-vram0" in bytes
-}
-
-// findCardX maps PCI slot to /dev/dri/cardX
-func findCardX(pciSlot string) (string, error) {
- driPath := "/sys/class/drm"
- entries, err := os.ReadDir(driPath)
- if err != nil {
- return "", fmt.Errorf("failed to read /sys/class/drm: %v", err)
- }
- for _, entry := range entries {
- if strings.HasPrefix(entry.Name(), "card") {
- deviceLink := filepath.Join(driPath, entry.Name(), "device")
- target, err := os.Readlink(deviceLink)
- if err != nil {
- continue
- }
- if strings.Contains(target, pciSlot) {
- return entry.Name(), nil
- }
- }
- }
- return "", fmt.Errorf("no cardX found for PCI slot %s", pciSlot)
-}
-
-// getDriver retrieves the driver name
-func getDriver(cardX string) (string, error) {
- driverLink := filepath.Join("/sys/class/drm", cardX, "device", "driver")
- target, err := os.Readlink(driverLink)
- if err != nil {
- return "", fmt.Errorf("failed to read driver link for %s: %v", cardX, err)
- }
- return filepath.Base(target), nil
-}
-
-// collectFDInfo gathers fdinfo data
-func collectFDInfo(cardX string) ([]FDInfo, error) {
- var fdInfos []FDInfo
- clientIDs := make(map[string]struct{})
-
- procDirs, err := os.ReadDir("/proc")
- if err != nil {
- return nil, fmt.Errorf("failed to read /proc: %v", err)
- }
-
- for _, procDir := range procDirs {
- if !procDir.IsDir() {
- continue
- }
- pid := procDir.Name()
- if _, err := strconv.Atoi(pid); err != nil {
- continue
- }
- fdDir := filepath.Join("/proc", pid, "fd")
- fdEntries, err := os.ReadDir(fdDir)
- if err != nil {
- continue
- }
- for _, fdEntry := range fdEntries {
- fdPath := filepath.Join(fdDir, fdEntry.Name())
- target, err := os.Readlink(fdPath)
- if err != nil {
- continue
- }
- if target == "/dev/dri/"+cardX {
- fdinfoPath := filepath.Join("/proc", pid, "fdinfo", fdEntry.Name())
- file, err := os.Open(fdinfoPath)
- if err != nil {
- continue
- }
-
- scanner := bufio.NewScanner(file)
- var clientID, engineTime, cycles, totalCycles, memoryVRAM string
- for scanner.Scan() {
- line := scanner.Text()
- parts := strings.SplitN(line, ":", 2)
- if len(parts) < 2 {
- continue
- }
- key := strings.TrimSpace(parts[0])
- value := strings.TrimSpace(parts[1])
- switch key {
- case "drm-client-id":
- clientID = value
- case "drm-engine-render":
- engineTime = value
- case "drm-cycles-rcs":
- cycles = value
- case "drm-total-cycles-rcs":
- totalCycles = value
- case "drm-memory-vram", "drm-total-vram0": // i915 and Xe keys
- memoryVRAM = value
- }
- }
- if clientID == "" || clientID == "0" {
- continue
- }
- if _, exists := clientIDs[clientID]; exists {
- continue
- }
- clientIDs[clientID] = struct{}{}
-
- fdInfo := FDInfo{ClientID: clientID}
- if engineTime != "" {
- fdInfo.EngineTime, _ = strconv.ParseUint(engineTime, 10, 64)
- }
- if cycles != "" {
- fdInfo.Cycles, _ = strconv.ParseUint(cycles, 10, 64)
- }
- if totalCycles != "" {
- fdInfo.TotalCycles, _ = strconv.ParseUint(totalCycles, 10, 64)
- }
- if memoryVRAM != "" {
- if strings.HasSuffix(memoryVRAM, " kB") || strings.HasSuffix(memoryVRAM, " KiB") {
- memKB := strings.TrimSuffix(strings.TrimSuffix(memoryVRAM, " kB"), " KiB")
- if mem, err := strconv.ParseUint(memKB, 10, 64); err == nil {
- fdInfo.MemoryVRAM = mem * 1024 // Convert kB to bytes
- }
- } else {
- fdInfo.MemoryVRAM, _ = strconv.ParseUint(memoryVRAM, 10, 64) // Assume bytes if no unit
- }
- }
- fdInfos = append(fdInfos, fdInfo)
- _ = file.Close()
- }
- }
- }
- return fdInfos, nil
-}
-
-// drmIoctl wraps the syscall.Syscall for ioctl
-func drmIoctl(fd int, request uintptr, data unsafe.Pointer) error {
- _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), request, uintptr(data))
- if errno != 0 {
- return fmt.Errorf("ioctl failed: %v", errno)
- }
- return nil
-}
-
-func monitorIntelGPU(device PCIInfo) GPUUsage {
- // Map PCI slot to cardX
- cardX, err := findCardX(device.Slot)
- if err != nil {
- slog.Warn("failed to find cardX for Intel GPU", "slot", device.Slot, "error", err)
- return GPUUsage{}
- }
-
- // Determine driver
- driver, err := getDriver(cardX)
- if err != nil {
- slog.Warn("failed to get driver", "card", cardX, "error", err)
- return GPUUsage{}
- }
- if driver != "i915" && driver != "xe" {
- slog.Warn("unsupported Intel driver", "driver", driver, "card", cardX)
- return GPUUsage{}
- }
-
- // PCIInfo also has the driver, let's warn if they don't match
- if device.Driver != driver {
- slog.Warn("driver mismatch", "card", cardX, "lspci driver", device.Driver, "sysfs driver", driver)
- }
-
- // Open DRM device
- cardPath := "/dev/dri/" + cardX
- fd, err := syscall.Open(cardPath, syscall.O_RDWR, 0)
- if err != nil {
- slog.Error("failed to open DRM device", "path", cardPath, "error", err)
- return GPUUsage{}
- }
- defer func(fd int) {
- _ = syscall.Close(fd)
- }(fd)
-
- // Get total and used VRAM via ioctl
- var totalVRAM, usedVRAMFromIOCTL uint64
- if driver == "i915" {
- totalVRAM, usedVRAMFromIOCTL, err = getMemoryRegionsI915(fd)
- } else { // xe
- totalVRAM, usedVRAMFromIOCTL, err = queryMemoryRegionsXE(fd)
- }
- if err != nil {
- //slog.Debug("failed to get memory regions", "card", cardX, "error", err)
- // Proceed with totalVRAM = 0 if ioctl fails
- }
-
- // Collect samples for usage percentage
- firstFDInfos, err := collectFDInfo(cardX)
- if err != nil {
- slog.Warn("failed to collect first FDInfo", "card", cardX, "error", err)
- return GPUUsage{}
- }
- time.Sleep(1 * time.Second)
- secondFDInfos, err := collectFDInfo(cardX)
- if err != nil {
- slog.Warn("failed to collect second FDInfo", "card", cardX, "error", err)
- return GPUUsage{}
- }
-
- // Calculate usage percentage
- var usagePercent float64
- if driver == "i915" {
- var totalDeltaTime uint64
- for _, second := range secondFDInfos {
- for _, first := range firstFDInfos {
- if second.ClientID == first.ClientID {
- totalDeltaTime += second.EngineTime - first.EngineTime
- break
- }
- }
- }
- if totalDeltaTime > 0 {
- usagePercent = float64(totalDeltaTime) / 1e9 * 100 // ns to percent
- }
- } else { // xe
- var totalDeltaCycles, deltaTotalCycles uint64
- for i, second := range secondFDInfos {
- for _, first := range firstFDInfos {
- if second.ClientID == first.ClientID {
- deltaCycles := second.Cycles - first.Cycles
- totalDeltaCycles += deltaCycles
- if i == 0 {
- deltaTotalCycles = second.TotalCycles - first.TotalCycles
- }
- break
- }
- }
- }
- if deltaTotalCycles > 0 {
- usagePercent = float64(totalDeltaCycles) / float64(deltaTotalCycles) * 100
- }
- }
- if usagePercent > 100 {
- usagePercent = 100
- }
-
- // Sum per-process VRAM usage as fallback
- var usedVRAM uint64
- for _, fdInfo := range secondFDInfos {
- usedVRAM += fdInfo.MemoryVRAM
- }
-
- // Prefer ioctl used VRAM if available and non-zero
- if usedVRAMFromIOCTL != 0 {
- usedVRAM = usedVRAMFromIOCTL
- }
-
- // Compute VRAM metrics
- var freeVRAM uint64
- var usedPercent float64
- if totalVRAM > 0 {
- if usedVRAM > totalVRAM {
- usedVRAM = totalVRAM
- }
- freeVRAM = totalVRAM - usedVRAM
- usedPercent = float64(usedVRAM) / float64(totalVRAM) * 100
- }
-
- return GPUUsage{
- Info: device,
- UsagePercent: usagePercent,
- VRAM: VRAMUsage{
- Total: totalVRAM,
- Used: usedVRAM,
- Free: freeVRAM,
- UsedPercent: usedPercent,
- },
- }
-}
diff --git a/cloud/packages/maitred/internal/system/gpu_intel_i915.go b/cloud/packages/maitred/internal/system/gpu_intel_i915.go
deleted file mode 100644
index 2ffcf605..00000000
--- a/cloud/packages/maitred/internal/system/gpu_intel_i915.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package system
-
-import (
- "fmt"
- "unsafe"
-)
-
-// Constants for i915
-const (
- DRM_COMMAND_BASE = 0x40
- DRM_I915_QUERY = 0x39
- DRM_IOCTL_I915_QUERY = 0x80106479 // _IOWR('d', 0x79, 16)
- DRM_I915_QUERY_MEMORY_REGIONS = 4
- I915_MEMORY_CLASS_DEVICE = 1
-)
-
-// drmI915QueryItem mirrors struct drm_i915_query_item
-type drmI915QueryItem struct {
- QueryID uintptr
- Length int32
- Flags uint32
- DataPtr uintptr
-}
-
-// drmI915Query mirrors struct drm_i915_query
-type drmI915Query struct {
- NumItems uint32
- Flags uint32
- ItemsPtr uintptr
-}
-
-// drmI915MemoryRegionInfo mirrors struct drm_i915_memory_region_info
-type drmI915MemoryRegionInfo struct {
- Region struct {
- MemoryClass uint16
- MemoryInstance uint16
- }
- Rsvd0 uint32
- ProbedSize uint64
- UnallocatedSize uint64
- Rsvd1 [8]uint64
-}
-
-func getMemoryRegionsI915(fd int) (totalVRAM, usedVRAM uint64, err error) {
- // Step 1: Get the required buffer size
- item := drmI915QueryItem{
- QueryID: DRM_I915_QUERY_MEMORY_REGIONS,
- Length: 0,
- }
- query := drmI915Query{
- NumItems: 1,
- ItemsPtr: uintptr(unsafe.Pointer(&item)),
- }
- if err = drmIoctl(fd, DRM_IOCTL_I915_QUERY, unsafe.Pointer(&query)); err != nil {
- return 0, 0, fmt.Errorf("initial i915 query failed: %v", err)
- }
- if item.Length <= 0 {
- return 0, 0, fmt.Errorf("i915 query returned invalid length: %d", item.Length)
- }
-
- // Step 2: Allocate buffer and perform the query
- data := make([]byte, item.Length)
- item.DataPtr = uintptr(unsafe.Pointer(&data[0]))
- if err = drmIoctl(fd, DRM_IOCTL_I915_QUERY, unsafe.Pointer(&query)); err != nil {
- return 0, 0, fmt.Errorf("second i915 query failed: %v", err)
- }
-
- // Step 3: Parse the memory regions
- numRegions := *(*uint32)(unsafe.Pointer(&data[0]))
- headerSize := uint32(16) // num_regions (4) + rsvd[3] (12) = 16 bytes
- regionSize := uint32(88) // Size of drm_i915_memory_region_info (calculated: 4+4+8+8+64)
-
- for i := uint32(0); i < numRegions; i++ {
- offset := headerSize + i*regionSize
- if offset+regionSize > uint32(len(data)) {
- return 0, 0, fmt.Errorf("data buffer too small for i915 region %d", i)
- }
- mr := (*drmI915MemoryRegionInfo)(unsafe.Pointer(&data[offset]))
- if mr.Region.MemoryClass == I915_MEMORY_CLASS_DEVICE {
- totalVRAM += mr.ProbedSize
- usedVRAM += mr.ProbedSize - mr.UnallocatedSize
- }
- }
-
- return totalVRAM, usedVRAM, nil
-}
diff --git a/cloud/packages/maitred/internal/system/gpu_intel_xe.go b/cloud/packages/maitred/internal/system/gpu_intel_xe.go
deleted file mode 100644
index 878f7a84..00000000
--- a/cloud/packages/maitred/internal/system/gpu_intel_xe.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package system
-
-import (
- "fmt"
- "unsafe"
-)
-
-// Constants from xe_drm.h
-const (
- DRM_XE_DEVICE_QUERY_MEM_REGIONS = 1
- DRM_XE_MEM_REGION_CLASS_VRAM = 1
- DRM_XE_DEVICE_QUERY = 0x00
- DRM_IOCTL_XE_DEVICE_QUERY uintptr = 0xC0286440 // Precomputed as above
-)
-
-// drmXEDeviceQuery mirrors struct drm_xe_device_query
-type drmXEDeviceQuery struct {
- Extensions uint64
- Query uint32
- Size uint32
- Data uint64
- Reserved [2]uint64
-}
-
-// drmXEQueryMemRegions mirrors struct drm_xe_query_mem_regions header
-type drmXEQueryMemRegions struct {
- NumMemRegions uint32
- Pad uint32
- // mem_regions[] follows
-}
-
-// drmXEMemRegion mirrors struct drm_xe_mem_region
-type drmXEMemRegion struct {
- MemClass uint16
- Instance uint16
- MinPageSize uint32
- TotalSize uint64
- Used uint64
- CPUVisibleSize uint64
- CPUVisibleUsed uint64
- Reserved [6]uint64
-}
-
-func queryMemoryRegionsXE(fd int) (totalVRAM, usedVRAM uint64, err error) {
- // Step 1: Get the required size
- query := drmXEDeviceQuery{
- Query: DRM_XE_DEVICE_QUERY_MEM_REGIONS,
- Size: 0,
- }
- if err = drmIoctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, unsafe.Pointer(&query)); err != nil {
- return 0, 0, fmt.Errorf("initial xe query failed: %v", err)
- }
- if query.Size == 0 {
- return 0, 0, fmt.Errorf("xe query returned zero size")
- }
-
- // Step 2: Allocate buffer and perform the query
- data := make([]byte, query.Size)
- query.Data = uint64(uintptr(unsafe.Pointer(&data[0])))
- query.Size = uint32(len(data))
- if err = drmIoctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, unsafe.Pointer(&query)); err != nil {
- return 0, 0, fmt.Errorf("second xe query failed: %v", err)
- }
-
- // Step 3: Parse the memory regions
- header := (*drmXEQueryMemRegions)(unsafe.Pointer(&data[0]))
- numRegions := header.NumMemRegions
- headerSize := unsafe.Sizeof(drmXEQueryMemRegions{})
- regionSize := unsafe.Sizeof(drmXEMemRegion{})
-
- for i := uint32(0); i < numRegions; i++ {
- offset := headerSize + uintptr(i)*regionSize
- if offset+regionSize > uintptr(len(data)) {
- return 0, 0, fmt.Errorf("data buffer too small for xe region %d", i)
- }
- mr := (*drmXEMemRegion)(unsafe.Pointer(&data[offset]))
- if mr.MemClass == DRM_XE_MEM_REGION_CLASS_VRAM {
- totalVRAM += mr.TotalSize
- usedVRAM += mr.Used
- }
- }
-
- return totalVRAM, usedVRAM, nil
-}
diff --git a/cloud/packages/maitred/internal/system/gpu_nvidia.go b/cloud/packages/maitred/internal/system/gpu_nvidia.go
deleted file mode 100644
index e5c39ac0..00000000
--- a/cloud/packages/maitred/internal/system/gpu_nvidia.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package system
-
-import (
- "log/slog"
- "os/exec"
- "strconv"
- "strings"
-)
-
-// monitorNVIDIAGPU monitors an NVIDIA GPU using nvidia-smi
-func monitorNVIDIAGPU(device PCIInfo) GPUUsage {
- // Query nvidia-smi for GPU metrics
- cmd := exec.Command("nvidia-smi", "--query-gpu=pci.bus_id,utilization.gpu,memory.total,memory.used,memory.free", "--format=csv,noheader,nounits")
- output, err := cmd.Output()
- if err != nil {
- slog.Warn("failed to run nvidia-smi", "error", err)
- return GPUUsage{}
- }
-
- // Parse output and find matching GPU
- lines := strings.Split(strings.TrimSpace(string(output)), "\n")
- for _, line := range lines {
- fields := strings.Split(line, ", ")
- if len(fields) != 5 {
- continue
- }
- busID := fields[0] // e.g., "0000:01:00.0"
- if strings.Contains(busID, device.Slot) || strings.Contains(device.Slot, busID) {
- usagePercent, _ := strconv.ParseFloat(fields[1], 64)
- totalMiB, _ := strconv.ParseUint(fields[2], 10, 64)
- usedMiB, _ := strconv.ParseUint(fields[3], 10, 64)
- freeMiB, _ := strconv.ParseUint(fields[4], 10, 64)
-
- // Convert MiB to bytes
- total := totalMiB * 1024 * 1024
- used := usedMiB * 1024 * 1024
- free := freeMiB * 1024 * 1024
- usedPercent := float64(0)
- if total > 0 {
- usedPercent = float64(used) / float64(total) * 100
- }
-
- return GPUUsage{
- Info: device,
- UsagePercent: usagePercent,
- VRAM: VRAMUsage{
- Total: total,
- Used: used,
- Free: free,
- UsedPercent: usedPercent,
- },
- }
- }
- }
- slog.Warn("No NVIDIA GPU found matching PCI slot", "slot", device.Slot)
- return GPUUsage{}
-}
diff --git a/cloud/packages/maitred/internal/system/id.go b/cloud/packages/maitred/internal/system/id.go
deleted file mode 100644
index 4d95cd58..00000000
--- a/cloud/packages/maitred/internal/system/id.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package system
-
-import (
- "os"
- "strings"
-)
-
-const (
- dbusPath = "/var/lib/dbus/machine-id"
- dbusPathEtc = "/etc/machine-id"
-)
-
-// GetID returns the machine ID specified at `/var/lib/dbus/machine-id` or `/etc/machine-id`.
-// If there is an error reading the files an empty string is returned.
-func GetID() (string, error) {
- id, err := os.ReadFile(dbusPath)
- if err != nil {
- id, err = os.ReadFile(dbusPathEtc)
- }
- if err != nil {
- return "", err
- }
- return strings.Trim(string(id), " \n"), nil
-}
diff --git a/cloud/packages/maitred/internal/system/resources.go b/cloud/packages/maitred/internal/system/resources.go
deleted file mode 100644
index 53199a20..00000000
--- a/cloud/packages/maitred/internal/system/resources.go
+++ /dev/null
@@ -1,405 +0,0 @@
-package system
-
-import (
- "bufio"
- "bytes"
- "context"
- "fmt"
- "log/slog"
- "os"
- "os/exec"
- "strconv"
- "strings"
- "sync"
- "time"
-)
-
-// CPUInfo contains CPU model information
-type CPUInfo struct {
- Vendor string `json:"vendor"` // CPU vendor (e.g., "AMD", "Intel")
- Model string `json:"model"` // CPU model name
-}
-
-// CPUUsage contains CPU usage metrics
-type CPUUsage struct {
- Info CPUInfo `json:"info"` // CPU vendor and model information
- Total float64 `json:"total"` // Total CPU usage in percentage (0-100)
- PerCore []float64 `json:"per_core"` // CPU usage per core in percentage (0-100)
-}
-
-// MemoryUsage contains memory usage metrics
-type MemoryUsage struct {
- Total uint64 `json:"total"` // Total memory in bytes
- Used uint64 `json:"used"` // Used memory in bytes
- Available uint64 `json:"available"` // Available memory in bytes
- Free uint64 `json:"free"` // Free memory in bytes
- UsedPercent float64 `json:"used_percent"` // Used memory in percentage (0-100)
-}
-
-// FilesystemUsage contains usage metrics for a filesystem path
-type FilesystemUsage struct {
- Path string `json:"path"` // Filesystem path
- Total uint64 `json:"total"` // Total disk space in bytes
- Used uint64 `json:"used"` // Used disk space in bytes
- Free uint64 `json:"free"` // Free disk space in bytes
- UsedPercent float64 `json:"used_percent"` // Used disk space in percentage (0-100)
-}
-
-// GPUUsage contains GPU usage metrics
-type GPUUsage struct {
- Info PCIInfo `json:"pci_info"` // GPU PCI information
- UsagePercent float64 `json:"usage_percent"` // GPU usage in percentage (0-100)
- VRAM VRAMUsage `json:"vram"` // GPU memory usage metrics
-}
-
-// VRAMUsage contains GPU memory usage metrics
-type VRAMUsage struct {
- Total uint64 `json:"total"` // Total VRAM in bytes
- Used uint64 `json:"used"` // Used VRAM in bytes
- Free uint64 `json:"free"` // Free VRAM in bytes
- UsedPercent float64 `json:"used_percent"` // Used VRAM in percentage (0-100)
-}
-
-// ResourceUsage contains resource usage metrics
-type ResourceUsage struct {
- CPU CPUUsage `json:"cpu"` // CPU usage metrics
- Memory MemoryUsage `json:"memory"` // Memory usage metrics
- Disk FilesystemUsage `json:"disk"` // Disk usage metrics
- GPUs []GPUUsage `json:"gpus"` // Per-GPU usage metrics
-}
-
-var (
- lastUsage ResourceUsage
- lastUsageMutex sync.RWMutex
-)
-
-// GetSystemUsage returns last known system resource usage metrics
-func GetSystemUsage() ResourceUsage {
- lastUsageMutex.RLock()
- defer lastUsageMutex.RUnlock()
- return lastUsage
-}
-
-// StartMonitoring begins periodic system usage monitoring with the given interval
-func StartMonitoring(ctx context.Context, interval time.Duration) {
- slog.Info("Starting system monitoring")
- go func() {
- // Initial sample immediately
- updateUsage()
-
- // Ticker for periodic updates
- ticker := time.NewTicker(interval)
- defer ticker.Stop()
-
- for {
- select {
- case <-ctx.Done():
- slog.Info("Stopping system monitoring")
- return
- case <-ticker.C:
- updateUsage()
- }
- }
- }()
-}
-
-// updateUsage collects and updates the lastUsage variable
-func updateUsage() {
- // Collect CPU usage
- cpu := GetCPUUsage()
-
- // Collect memory usage
- memory := GetMemoryUsage()
-
- // Collect root filesystem usage
- rootfs, err := GetFilesystemUsage("/")
- if err != nil {
- slog.Warn("Failed to get root filesystem usage", "error", err)
- }
-
- // Collect GPU usage
- gpus := GetGPUUsage()
-
- // Update shared variable safely
- lastUsageMutex.Lock()
- lastUsage = ResourceUsage{
- CPU: cpu,
- Memory: memory,
- Disk: rootfs,
- GPUs: gpus,
- }
- lastUsageMutex.Unlock()
-}
-
-// PrettyString returns resource usage metrics in a human-readable format string
-func (r ResourceUsage) PrettyString() string {
- res := "Resource Usage:\n"
- res += fmt.Sprintf(" CPU:\n")
- res += fmt.Sprintf(" Vendor: %s\n", r.CPU.Info.Vendor)
- res += fmt.Sprintf(" Model: %s\n", r.CPU.Info.Model)
- res += fmt.Sprintf(" Total Usage: %.2f%%\n", r.CPU.Total)
- res += fmt.Sprintf(" Per-Core Usage:\n")
- res += fmt.Sprintf(" [")
- for i, coreUsage := range r.CPU.PerCore {
- res += fmt.Sprintf("%.2f%%", coreUsage)
- if i < len(r.CPU.PerCore)-1 {
- res += ", "
- }
- }
- res += "]\n"
-
- res += fmt.Sprintf(" Memory:\n")
- res += fmt.Sprintf(" Total: %d bytes\n", r.Memory.Total)
- res += fmt.Sprintf(" Used: %d bytes\n", r.Memory.Used)
- res += fmt.Sprintf(" Available: %d bytes\n", r.Memory.Available)
- res += fmt.Sprintf(" Free: %d bytes\n", r.Memory.Free)
- res += fmt.Sprintf(" Used Percent: %.2f%%\n", r.Memory.UsedPercent)
-
- res += fmt.Sprintf(" Filesystem:\n")
- res += fmt.Sprintf(" Path: %s\n", r.Disk.Path)
- res += fmt.Sprintf(" Total: %d bytes\n", r.Disk.Total)
- res += fmt.Sprintf(" Used: %d bytes\n", r.Disk.Used)
- res += fmt.Sprintf(" Free: %d bytes\n", r.Disk.Free)
- res += fmt.Sprintf(" Used Percent: %.2f%%\n", r.Disk.UsedPercent)
-
- res += fmt.Sprintf(" GPUs:\n")
- for i, gpu := range r.GPUs {
- cardDev, renderDev, err := gpu.Info.GetCardDevices()
- if err != nil {
- slog.Warn("Failed to get card and render devices", "error", err)
- }
-
- res += fmt.Sprintf(" GPU %d:\n", i)
- res += fmt.Sprintf(" Vendor: %s\n", gpu.Info.Vendor.Name)
- res += fmt.Sprintf(" Model: %s\n", gpu.Info.Device.Name)
- res += fmt.Sprintf(" Driver: %s\n", gpu.Info.Driver)
- res += fmt.Sprintf(" Card Device: %s\n", cardDev)
- res += fmt.Sprintf(" Render Device: %s\n", renderDev)
- res += fmt.Sprintf(" Usage Percent: %.2f%%\n", gpu.UsagePercent)
- res += fmt.Sprintf(" VRAM:\n")
- res += fmt.Sprintf(" Total: %d bytes\n", gpu.VRAM.Total)
- res += fmt.Sprintf(" Used: %d bytes\n", gpu.VRAM.Used)
- res += fmt.Sprintf(" Free: %d bytes\n", gpu.VRAM.Free)
- res += fmt.Sprintf(" Used Percent: %.2f%%\n", gpu.VRAM.UsedPercent)
- }
-
- return res
-}
-
-// GetCPUUsage gathers CPU usage
-func GetCPUUsage() CPUUsage {
- // Helper to read /proc/stat
- readStat := func() (uint64, uint64, []uint64, []uint64) {
- statBytes, err := os.ReadFile("/proc/stat")
- if err != nil {
- slog.Warn("Failed to read /proc/stat", "error", err)
- return 0, 0, nil, nil
- }
- statScanner := bufio.NewScanner(bytes.NewReader(statBytes))
- statScanner.Scan() // Total CPU line
- fields := strings.Fields(statScanner.Text())[1:]
- var total, idle uint64
- for i, field := range fields {
- val, _ := strconv.ParseUint(field, 10, 64)
- total += val
- if i == 3 { // Idle time
- idle = val
- }
- }
-
- var perCoreTotals, perCoreIdles []uint64
- for statScanner.Scan() {
- line := statScanner.Text()
- if !strings.HasPrefix(line, "cpu") {
- break
- }
- coreFields := strings.Fields(line)[1:]
- var coreTotal, coreIdle uint64
- for i, field := range coreFields {
- val, _ := strconv.ParseUint(field, 10, 64)
- coreTotal += val
- if i == 3 { // Idle time
- coreIdle = val
- }
- }
- perCoreTotals = append(perCoreTotals, coreTotal)
- perCoreIdles = append(perCoreIdles, coreIdle)
- }
- return total, idle, perCoreTotals, perCoreIdles
- }
-
- // First sample
- prevTotal, prevIdle, prevPerCoreTotals, prevPerCoreIdles := readStat()
- time.Sleep(1 * time.Second) // Delay for accurate delta
- // Second sample
- currTotal, currIdle, currPerCoreTotals, currPerCoreIdles := readStat()
-
- // Calculate total CPU usage
- totalDiff := float64(currTotal - prevTotal)
- idleDiff := float64(currIdle - prevIdle)
- var totalUsage float64
- if totalDiff > 0 {
- totalUsage = ((totalDiff - idleDiff) / totalDiff) * 100
- }
-
- // Calculate per-core usage
- var perCore []float64
- for i := range currPerCoreTotals {
- coreTotalDiff := float64(currPerCoreTotals[i] - prevPerCoreTotals[i])
- coreIdleDiff := float64(currPerCoreIdles[i] - prevPerCoreIdles[i])
- if coreTotalDiff > 0 {
- perCoreUsage := ((coreTotalDiff - coreIdleDiff) / coreTotalDiff) * 100
- perCore = append(perCore, perCoreUsage)
- } else {
- perCore = append(perCore, 0)
- }
- }
-
- // Get CPU info
- cpuInfoBytes, err := os.ReadFile("/proc/cpuinfo")
- if err != nil {
- slog.Warn("Failed to read /proc/cpuinfo", "error", err)
- return CPUUsage{}
- }
- cpuInfo := string(cpuInfoBytes)
- scanner := bufio.NewScanner(strings.NewReader(cpuInfo))
- var vendor, model string
- for scanner.Scan() {
- line := scanner.Text()
- if strings.HasPrefix(line, "vendor_id") {
- vendor = strings.TrimSpace(strings.Split(line, ":")[1])
- } else if strings.HasPrefix(line, "model name") {
- model = strings.TrimSpace(strings.Split(line, ":")[1])
- }
- if vendor != "" && model != "" {
- break
- }
- }
-
- return CPUUsage{
- Info: CPUInfo{
- Vendor: vendor,
- Model: model,
- },
- Total: totalUsage,
- PerCore: perCore,
- }
-}
-
-// GetMemoryUsage gathers memory usage from /proc/meminfo
-func GetMemoryUsage() MemoryUsage {
- data, err := os.ReadFile("/proc/meminfo")
- if err != nil {
- panic(err)
- }
-
- scanner := bufio.NewScanner(bytes.NewReader(data))
- var total, free, available uint64
-
- for scanner.Scan() {
- line := scanner.Text()
- if strings.HasPrefix(line, "MemTotal:") {
- total = parseMemInfoLine(line)
- } else if strings.HasPrefix(line, "MemFree:") {
- free = parseMemInfoLine(line)
- } else if strings.HasPrefix(line, "MemAvailable:") {
- available = parseMemInfoLine(line)
- }
- }
-
- used := total - available
- usedPercent := (float64(used) / float64(total)) * 100
-
- return MemoryUsage{
- Total: total * 1024, // Convert from KB to bytes
- Used: used * 1024,
- Available: available * 1024,
- Free: free * 1024,
- UsedPercent: usedPercent,
- }
-}
-
-// parseMemInfoLine parses a line from /proc/meminfo
-func parseMemInfoLine(line string) uint64 {
- fields := strings.Fields(line)
- val, _ := strconv.ParseUint(fields[1], 10, 64)
- return val
-}
-
-// GetFilesystemUsage gathers usage statistics for the specified path
-func GetFilesystemUsage(path string) (FilesystemUsage, error) {
- cmd := exec.Command("df", path)
- output, err := cmd.Output()
- if err != nil {
- return FilesystemUsage{}, err
- }
-
- lines := strings.Split(string(output), "\n")
- if len(lines) < 2 {
- return FilesystemUsage{}, fmt.Errorf("unexpected `df` output format for path: %s", path)
- }
-
- fields := strings.Fields(lines[1])
- if len(fields) < 5 {
- return FilesystemUsage{}, fmt.Errorf("insufficient fields in `df` output for path: %s", path)
- }
-
- total, err := strconv.ParseUint(fields[1], 10, 64)
- if err != nil {
- return FilesystemUsage{}, fmt.Errorf("failed to parse total space: %v", err)
- }
-
- used, err := strconv.ParseUint(fields[2], 10, 64)
- if err != nil {
- return FilesystemUsage{}, fmt.Errorf("failed to parse used space: %v", err)
- }
-
- free, err := strconv.ParseUint(fields[3], 10, 64)
- if err != nil {
- return FilesystemUsage{}, fmt.Errorf("failed to parse free space: %v", err)
- }
-
- usedPercent, err := strconv.ParseFloat(strings.TrimSuffix(fields[4], "%"), 64)
- if err != nil {
- return FilesystemUsage{}, fmt.Errorf("failed to parse used percentage: %v", err)
- }
-
- return FilesystemUsage{
- Path: path,
- Total: total * 1024,
- Used: used * 1024,
- Free: free * 1024,
- UsedPercent: usedPercent,
- }, nil
-}
-
-// GetGPUUsage gathers GPU usage for all detected GPUs
-func GetGPUUsage() []GPUUsage {
- var gpus []GPUUsage
-
- // Detect all GPUs
- pciInfos, err := GetAllGPUInfo()
- if err != nil {
- slog.Warn("Failed to get GPU info", "error", err)
- return nil
- }
-
- // Monitor each GPU
- for _, gpu := range pciInfos {
- var gpuUsage GPUUsage
- switch gpu.Vendor.ID {
- case VendorIntel:
- gpuUsage = monitorIntelGPU(gpu)
- case VendorNVIDIA:
- gpuUsage = monitorNVIDIAGPU(gpu)
- case VendorAMD:
- // TODO: Implement if needed
- continue
- default:
- continue
- }
- gpus = append(gpus, gpuUsage)
- }
-
- return gpus
-}
diff --git a/cloud/packages/maitred/main.go b/cloud/packages/maitred/main.go
deleted file mode 100644
index 25cefe12..00000000
--- a/cloud/packages/maitred/main.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package main
-
-import (
- "context"
- "log/slog"
- "nestri/maitred/internal"
- "nestri/maitred/internal/containers"
- "nestri/maitred/internal/realtime"
- "nestri/maitred/internal/resource"
- "nestri/maitred/internal/system"
- "os"
- "os/signal"
- "syscall"
- "time"
-)
-
-func main() {
- // Setup main context and stopper
- mainCtx, mainStop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
-
- // Get flags and log them
- internal.InitFlags()
- internal.GetFlags().DebugLog()
-
- logLevel := slog.LevelInfo
- if internal.GetFlags().Verbose {
- logLevel = slog.LevelDebug
- }
-
- // Create the base handler with debug level
- baseHandler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
- Level: logLevel,
- })
- customHandler := &internal.CustomHandler{Handler: baseHandler}
- logger := slog.New(customHandler)
- slog.SetDefault(logger)
-
- if !internal.GetFlags().NoMonitor {
- // Start system monitoring, fetch every 5 seconds
- system.StartMonitoring(mainCtx, 5*time.Second)
- }
-
- // Get machine ID
- machineID, err := system.GetID()
- if err != nil {
- slog.Error("failed getting machine id", "err", machineID)
- }
-
- slog.Info("Machine ID", "id", machineID)
-
- // Initialize container engine
- ctrEngine, err := containers.NewContainerEngine()
- if err != nil {
- slog.Error("failed initializing container engine", "err", err)
- mainStop()
- return
- }
- defer func(ctrEngine containers.ContainerEngine) {
- // Stop our managed containers first, with a 30 second timeout
- cleanupCtx, cleanupCancel := context.WithTimeout(context.Background(), 30*time.Second)
- defer cleanupCancel()
- err = realtime.CleanupManaged(cleanupCtx, ctrEngine)
- if err != nil {
- slog.Error("failed cleaning up managed containers", "err", err)
- }
-
- err = ctrEngine.Close()
- if err != nil {
- slog.Error("failed closing container engine", "err", err)
- }
- }(ctrEngine)
-
- // Print engine info
- info, err := ctrEngine.Info(mainCtx)
- if err != nil {
- slog.Error("failed getting engine info", "err", err)
- mainStop()
- return
- }
- slog.Info("Container engine", "info", info)
-
- if err = realtime.InitializeManager(mainCtx, ctrEngine); err != nil {
- slog.Error("failed initializing container manager", "err", err)
- mainStop()
- return
- }
-
- // If in debug mode, skip running SST - MQTT connections
- if !internal.GetFlags().Debug {
- // Initialize SST resource
- res, err := resource.NewResource()
- if err != nil {
- slog.Error("failed getting resource", "err", err)
- mainStop()
- return
- }
-
- // Run realtime
- err = realtime.Run(mainCtx, machineID, ctrEngine, res)
- if err != nil {
- slog.Error("failed running realtime", "err", err)
- mainStop()
- return
- }
- }
-
- // Create relay container
- slog.Info("Creating default relay container")
- relayID, err := realtime.CreateRelay(mainCtx, ctrEngine)
- if err != nil {
- slog.Error("failed creating relay container", "err", err)
- mainStop()
- return
- }
- // Start relay container
- slog.Info("Starting default relay container", "id", relayID)
- if err = realtime.StartRelay(mainCtx, ctrEngine, relayID); err != nil {
- slog.Error("failed starting relay container", "err", err)
- mainStop()
- return
- }
-
- // Wait for signal
- <-mainCtx.Done()
- slog.Info("Shutting down gracefully by signal..")
-}
diff --git a/cloud/packages/maitred/package.json b/cloud/packages/maitred/package.json
deleted file mode 100644
index c22c0005..00000000
--- a/cloud/packages/maitred/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "name": "@nestri/maitred",
- "version": "0.1.0",
- "type": "module",
- "sideEffects": false,
- "scripts": {
- "dev": "sst shell go run main.go"
- },
- "devDependencies": {},
- "dependencies": {}
- }
\ No newline at end of file
diff --git a/cloud/packages/maitred/sst-env.d.ts b/cloud/packages/maitred/sst-env.d.ts
deleted file mode 100644
index 9b9de732..00000000
--- a/cloud/packages/maitred/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/www/.gitkeep b/cloud/packages/www/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/containerfiles/Caddyfile b/containerfiles/Caddyfile
deleted file mode 100644
index 1038c791..00000000
--- a/containerfiles/Caddyfile
+++ /dev/null
@@ -1,9 +0,0 @@
-relay.example.com {
- @ws {
- header Connection Upgrade
- header Upgrade websocket
- }
- tls you@example.com
- reverse_proxy @ws relay:8088
- reverse_proxy relay:8088
-}
\ No newline at end of file
diff --git a/containerfiles/docker-compose.relay.caddy.yml b/containerfiles/docker-compose.relay.caddy.yml
deleted file mode 100644
index 8cc67702..00000000
--- a/containerfiles/docker-compose.relay.caddy.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-services:
- caddy:
- image: caddy:latest
- container_name: caddy
- ports:
- - "443:443"
- volumes:
- - ./Caddyfile:/etc/caddy/Caddyfile # your caddyfile
- - ./cert:/etc/caddy/certs
- depends_on:
- - relay
- networks:
- - relay_network
- restart: unless-stopped
-
- relay:
- #image: ghcr.io/nestrilabs/nestri/relay:nightly # Offical relay image
- image: ghcr.io/datcaptainhorse/nestri-relay:latest # Most current relay image
- container_name: relay
- environment:
- #- AUTO_ADD_LOCAL_IP=false # use with WEBRTC_NAT_IPS
- #- WEBRTC_NAT_IPS=1.2.3.4 # Add the LAN IP of your container here if connections fail
- - VERBOSE=true
- - DEBUG=true
- ports:
- - "8088:8088/udp"
- networks:
- - relay_network
- restart:
- unless-stopped
-networks:
- relay_network:
- driver: bridge
\ No newline at end of file
diff --git a/containerfiles/docker-compose.relay.traefik.yml b/containerfiles/docker-compose.relay.traefik.yml
deleted file mode 100644
index f456b7e6..00000000
--- a/containerfiles/docker-compose.relay.traefik.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-services:
- traefik:
- image: "traefik:v2.3"
- restart: always
- container_name: "traefik"
- networks:
- - traefik
- command:
- - "--api.insecure=true"
- - "--providers.docker=true"
- - "--providers.docker.network=traefik"
- - "--providers.docker.exposedbydefault=false"
- - "--entrypoints.web.address=:80"
- - "--entrypoints.web.http.redirections.entrypoint.to=web-secure"
- - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- - "--entrypoints.web-secure.address=:443"
- - "--certificatesresolvers.default.acme.tlschallenge=true"
- - "--certificatesresolvers.default.acme.email=foo@example.com" # Your email for tls challenge
- - "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
- ports:
- - "80:80"
- - "443:443"
- volumes:
- - "./letsencrypt:/letsencrypt" # Your letsencrypt folder for certificate persistence
- - "/var/run/docker.sock:/var/run/docker.sock:ro"
- restart:
- unless-stopped
- relay:
- #image: ghcr.io/nestrilabs/nestri/relay:nightly # Offical relay image
- image: ghcr.io/datcaptainhorse/nestri-relay:latest # Most current relay image
- container_name: relay
- environment:
- - AUTO_ADD_LOCAL_IP=false # Use with WEBRTC_NAT_IPS
- #- WEBRTC_NAT_IPS=1.2.3.4 # Add the LAN IP of your container here if connections fail
- - VERBOSE=true
- - DEBUG=true
- ports:
- - "8088:8088/udp"
- networks:
- - traefik
- restart:
- unless-stopped
- labels:
- - traefik.enable=true
- - traefik.http.routers.relay.rule=Host(`relay.example.com`) # Your domain for tls challenge
- - traefik.http.routers.relay.tls=true
- - traefik.http.routers.relay.tls.certresolver=default
- - traefik.http.routers.relay.entrypoints=web-secure
- - traefik.http.services.relay.loadbalancer.server.port=8088
-networks:
- traefik:
- external: true
\ No newline at end of file
diff --git a/containerfiles/heroic-runner.Containerfile b/containerfiles/heroic-runner.Containerfile
deleted file mode 100644
index 6d54b934..00000000
--- a/containerfiles/heroic-runner.Containerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-# Container build arguments #
-ARG RUNNER_COMMON_IMAGE=runner-common:latest
-
-#*********************#
-# Final Runtime Stage #
-#*********************#
-FROM ${RUNNER_COMMON_IMAGE}
-
-### FLAVOR/VARIANT CONFIGURATION ###
-## HEROIC LAUNCHER ##
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm heroic-games-launcher-bin && \
- # Cleanup
- paccache -rk1 && \
- rm -rf /usr/share/{info,man,doc}/*
-
-## FLAVOR/VARIANT LAUNCH COMMAND ##
-ENV NESTRI_LAUNCH_CMD="heroic"
-### END OF FLAVOR/VARIANT CONFIGURATION ###
-
-### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ###
-USER root
-ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"]
diff --git a/containerfiles/maitred.Containerfile b/containerfiles/maitred.Containerfile
deleted file mode 100644
index ddbaf355..00000000
--- a/containerfiles/maitred.Containerfile
+++ /dev/null
@@ -1,12 +0,0 @@
-FROM docker.io/golang:1.24-bookworm AS go-build
-WORKDIR /builder
-COPY packages/maitred/ /builder/
-RUN go build
-
-FROM docker.io/golang:1.24-bookworm
-COPY --from=go-build /builder/maitred /maitred/maitred
-WORKDIR /maitred
-
-RUN apt update && apt install -y --no-install-recommends pciutils
-
-ENTRYPOINT ["/maitred/maitred"]
\ No newline at end of file
diff --git a/containerfiles/minecraft-runner.Containerfile b/containerfiles/minecraft-runner.Containerfile
deleted file mode 100644
index 51c3e014..00000000
--- a/containerfiles/minecraft-runner.Containerfile
+++ /dev/null
@@ -1,24 +0,0 @@
-# Container build arguments #
-ARG RUNNER_COMMON_IMAGE=runner-common:latest
-
-#*********************#
-# Final Runtime Stage #
-#*********************#
-FROM ${RUNNER_COMMON_IMAGE}
-
-### FLAVOR/VARIANT CONFIGURATION ###
-## MINECRAFT ##
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm paru && \
- sudo -H -u ${NESTRI_USER} paru -S --noconfirm aur/minecraft-launcher && \
- # Cleanup
- paccache -rk1 && \
- rm -rf /usr/share/{info,man,doc}/*
-
-## FLAVOR/VARIANT LAUNCH COMMAND ##
-ENV NESTRI_LAUNCH_CMD="minecraft-launcher"
-### END OF FLAVOR/VARIANT CONFIGURATION ###
-
-### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ###
-USER root
-ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"]
diff --git a/containerfiles/playsite.Containerfile b/containerfiles/playsite.Containerfile
deleted file mode 100644
index 8c3f4bfb..00000000
--- a/containerfiles/playsite.Containerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-FROM docker.io/node:24-alpine AS base
-
-FROM base AS build
-WORKDIR /usr/src/app
-COPY package.json ./
-COPY packages/input ./packages/input
-COPY packages/play-standalone ./packages/play-standalone
-RUN cd packages/play-standalone && npm install && npm run build
-
-FROM base AS runner
-WORKDIR /www
-COPY --from=build /usr/src/app/packages/play-standalone/dist ./dist
-COPY --from=build /usr/src/app/node_modules ./node_modules
-
-RUN apk add --no-cache tini
-
-EXPOSE 3000
-WORKDIR /www
-ENTRYPOINT ["/sbin/tini", "--", "node", "./dist/server/entry.mjs"]
diff --git a/containerfiles/relay.Containerfile b/containerfiles/relay.Containerfile
deleted file mode 100644
index bc82d95f..00000000
--- a/containerfiles/relay.Containerfile
+++ /dev/null
@@ -1,25 +0,0 @@
-FROM docker.io/golang:1.25-alpine AS go-build
-WORKDIR /builder
-COPY packages/relay/ /builder/
-RUN go build
-
-FROM docker.io/golang:1.25-alpine
-COPY --from=go-build /builder/relay /relay/relay
-WORKDIR /relay
-
-# TODO: Switch running layer to just alpine (doesn't need golang dev stack)
-
-# ENV flags
-ENV REGEN_IDENTITY=false
-ENV VERBOSE=false
-ENV DEBUG=false
-ENV ENDPOINT_PORT=8088
-ENV WEBRTC_UDP_START=0
-ENV WEBRTC_UDP_END=0
-ENV STUN_SERVER="stun.l.google.com:19302"
-ENV WEBRTC_UDP_MUX=8088
-ENV WEBRTC_NAT_IPS=""
-ENV AUTO_ADD_LOCAL_IP=true
-ENV PERSIST_DIR="./persist-data"
-
-ENTRYPOINT ["/relay/relay"]
\ No newline at end of file
diff --git a/containerfiles/runner-base.Containerfile b/containerfiles/runner-base.Containerfile
deleted file mode 100644
index 43159011..00000000
--- a/containerfiles/runner-base.Containerfile
+++ /dev/null
@@ -1,13 +0,0 @@
-# Container build arguments #
-ARG BASE_IMAGE=docker.io/cachyos/cachyos:latest
-
-#*******************************************#
-# Base Stage - Simple with light essentials #
-#*******************************************#
-FROM ${BASE_IMAGE} AS bases
-
-# Only lightweight stuff needed by both builder and runtime
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -Sy --noconfirm \
- libssh2 curl wget libevdev libc++abi \
- gstreamer gst-plugins-base
diff --git a/containerfiles/runner-builder.Containerfile b/containerfiles/runner-builder.Containerfile
deleted file mode 100644
index 71784349..00000000
--- a/containerfiles/runner-builder.Containerfile
+++ /dev/null
@@ -1,202 +0,0 @@
-# Container build arguments #
-ARG RUNNER_BASE_IMAGE=runner-base:latest
-
-#**************#
-# builder base #
-#**************#
-FROM ${RUNNER_BASE_IMAGE} AS base-builder
-
-ENV ARTIFACTS=/artifacts
-RUN mkdir -p "${ARTIFACTS}"
-
-# Environment setup for Rust and Cargo
-ENV CARGO_HOME=/usr/local/cargo \
- PATH="${CARGO_HOME}/bin:${PATH}"
-
-# Install build essentials and caching tools
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm rustup git base-devel mold \
- meson pkgconf cmake git gcc make
-
-# Override various linker with symlink so mold is forcefully used (ld, ld.lld, lld)
-RUN ln -sf /usr/bin/mold /usr/bin/ld && \
- ln -sf /usr/bin/mold /usr/bin/ld.lld && \
- ln -sf /usr/bin/mold /usr/bin/lld
-
-# Install latest Rust using rustup
-RUN rustup default stable
-
-# Install cargo-chef with proper caching
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo install cargo-chef --locked
-
-#*******************************#
-# vimputti manager build stages #
-#*******************************#
-FROM base-builder AS vimputti-manager-deps
-WORKDIR /builder
-
-# Install build dependencies
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm lib32-gcc-libs
-
-# Clone repository
-RUN git clone --depth 1 --rev "2fde5376b6b9a38cdbd94ccc6a80c9d29a81a417" https://github.com/DatCaptainHorse/vimputti.git
-
-#--------------------------------------------------------------------
-FROM vimputti-manager-deps AS vimputti-manager-planner
-WORKDIR /builder/vimputti
-
-# Prepare recipe for dependency caching
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo chef prepare --recipe-path recipe.json
-
-#--------------------------------------------------------------------
-FROM vimputti-manager-deps AS vimputti-manager-cached-builder
-WORKDIR /builder/vimputti
-
-COPY --from=vimputti-manager-planner /builder/vimputti/recipe.json .
-
-# Cache dependencies using cargo-chef
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo chef cook --release --recipe-path recipe.json
-
-ENV CARGO_TARGET_DIR=/builder/target
-COPY --from=vimputti-manager-planner /builder/vimputti/ .
-
-# Build and install directly to artifacts
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- --mount=type=cache,target=/builder/target \
- cargo build --release --package vimputti-manager && \
- cargo build --release --package vimputti-shim && \
- rustup target add i686-unknown-linux-gnu && \
- cargo build --release --package vimputti-shim --target i686-unknown-linux-gnu && \
- cp "${CARGO_TARGET_DIR}/release/vimputti-manager" "${ARTIFACTS}" && \
- cp "${CARGO_TARGET_DIR}/release/libvimputti_shim.so" "${ARTIFACTS}/libvimputti_shim_64.so" && \
- cp "${CARGO_TARGET_DIR}/i686-unknown-linux-gnu/release/libvimputti_shim.so" "${ARTIFACTS}/libvimputti_shim_32.so"
-
-#****************************#
-# nestri-server build stages #
-#****************************#
-FROM base-builder AS nestri-server-deps
-WORKDIR /builder
-
-# Install build dependencies
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm gst-plugins-good gst-plugin-rswebrtc
-
-#--------------------------------------------------------------------
-FROM nestri-server-deps AS nestri-server-planner
-WORKDIR /builder/nestri
-
-COPY packages/server/Cargo.toml packages/server/Cargo.lock ./
-
-# Prepare recipe for dependency caching
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo chef prepare --recipe-path recipe.json
-
-#--------------------------------------------------------------------
-FROM nestri-server-deps AS nestri-server-cached-builder
-WORKDIR /builder/nestri
-
-COPY --from=nestri-server-planner /builder/nestri/recipe.json .
-
-# Cache dependencies using cargo-chef
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo chef cook --release --recipe-path recipe.json
-
-
-ENV CARGO_TARGET_DIR=/builder/target
-COPY packages/server/ ./
-
-# Build and install directly to artifacts
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- --mount=type=cache,target=/builder/target \
- cargo build --release && \
- cp "${CARGO_TARGET_DIR}/release/nestri-server" "${ARTIFACTS}"
-
-#**********************************#
-# gst-wayland-display build stages #
-#**********************************#
-FROM base-builder AS gst-wayland-deps
-WORKDIR /builder
-
-# Install build dependencies
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm libxkbcommon wayland \
- gst-plugins-good gst-plugins-bad libinput
-
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo install cargo-c
-
-# Clone repository
-RUN git clone --depth 1 --rev "67b1183997fd7aaf57398e4b01bd64c4d2433c45" https://github.com/games-on-whales/gst-wayland-display.git
-
-#--------------------------------------------------------------------
-FROM gst-wayland-deps AS gst-wayland-planner
-WORKDIR /builder/gst-wayland-display
-
-# Prepare recipe for dependency caching
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo chef prepare --recipe-path recipe.json
-
-#--------------------------------------------------------------------
-FROM gst-wayland-deps AS gst-wayland-cached-builder
-WORKDIR /builder/gst-wayland-display
-
-COPY --from=gst-wayland-planner /builder/gst-wayland-display/recipe.json .
-
-# Cache dependencies using cargo-chef
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- cargo chef cook --release --recipe-path recipe.json --features cuda
-
-
-ENV CARGO_TARGET_DIR=/builder/target
-
-COPY --from=gst-wayland-planner /builder/gst-wayland-display/ .
-
-# Build and install directly to artifacts
-RUN --mount=type=cache,target=${CARGO_HOME}/registry \
- --mount=type=cache,target=/builder/target \
- cargo cinstall --prefix=${ARTIFACTS} --release --features cuda
-
-#*********************************#
-# Patched bubblewrap build stages #
-#*********************************#
-FROM base-builder AS bubblewrap-deps
-WORKDIR /builder
-
-# Install build dependencies
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm libtool libcap libselinux
-
-# Copy patch file from host
-COPY packages/patches/bubblewrap/ /builder/patches/
-
-# Clone repository
-RUN git clone --depth 1 --rev "9ca3b05ec787acfb4b17bed37db5719fa777834f" https://github.com/containers/bubblewrap.git && \
- cd bubblewrap && \
- # Apply patch to fix user namespace issue
- git apply ../patches/bubbleunheck.patch
-
-#--------------------------------------------------------------------
-FROM bubblewrap-deps AS bubblewrap-builder
-WORKDIR /builder/bubblewrap
-
-# Build and install directly to artifacts
-RUN meson setup build --prefix=${ARTIFACTS} && \
- meson compile -C build && \
- meson install -C build
-
-#*********************************************#
-# Final Export Stage - Collects all artifacts #
-#*********************************************#
-FROM scratch AS artifacts
-
-COPY --from=nestri-server-cached-builder /artifacts/nestri-server /artifacts/bin/
-COPY --from=gst-wayland-cached-builder /artifacts/lib/ /artifacts/lib/
-COPY --from=gst-wayland-cached-builder /artifacts/include/ /artifacts/include/
-COPY --from=vimputti-manager-cached-builder /artifacts/vimputti-manager /artifacts/bin/
-COPY --from=vimputti-manager-cached-builder /artifacts/libvimputti_shim_64.so /artifacts/lib64/libvimputti_shim.so
-COPY --from=vimputti-manager-cached-builder /artifacts/libvimputti_shim_32.so /artifacts/lib32/libvimputti_shim.so
-COPY --from=bubblewrap-builder /artifacts/bin/bwrap /artifacts/bin/
diff --git a/containerfiles/runner-common.Containerfile b/containerfiles/runner-common.Containerfile
deleted file mode 100644
index 9ed3bf35..00000000
--- a/containerfiles/runner-common.Containerfile
+++ /dev/null
@@ -1,88 +0,0 @@
-# Container build arguments #
-ARG RUNNER_BASE_IMAGE=runner-base:latest
-ARG RUNNER_BUILDER_IMAGE=runner-builder:latest
-
-#**********************#
-# Runtime Common Stage #
-#**********************#
-FROM ${RUNNER_BASE_IMAGE} AS runtime
-FROM ${RUNNER_BUILDER_IMAGE} AS builder
-FROM runtime
-
-### Package Installation ###
-# Core system components
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --needed --noconfirm \
- vulkan-intel lib32-vulkan-intel vpl-gpu-rt \
- vulkan-radeon lib32-vulkan-radeon \
- mesa lib32-mesa vulkan-mesa-layers lib32-vulkan-mesa-layers \
- gtk3 lib32-gtk3 \
- sudo xorg-xwayland seatd libinput gamescope mangohud wlr-randr \
- pipewire pipewire-pulse pipewire-alsa wireplumber \
- noto-fonts-cjk supervisor jq pacman-contrib \
- hwdata openssh \
- # GStreamer stack
- gst-plugins-good \
- gst-plugins-bad gst-plugin-pipewire \
- gst-plugin-webrtchttp gst-plugin-rswebrtc gst-plugin-rsrtp \
- gst-plugin-va gst-plugin-qsv && \
- # Cleanup
- paccache -rk1 && \
- rm -rf /usr/share/{info,man,doc}/*
-
-### User Configuration ###
-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 \
- NESTRI_VIMPUTTI_PATH=/tmp/vimputti-1000 \
- 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} as: ${NESTRI_USER_PWD}" && \
- 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 "${NESTRI_USER}"
-
-### System Services Configuration ###
-RUN mkdir -p /run/dbus && \
- # Wireplumber suspend disable
- 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 Systems Configs - Latency optimizations + Loopback ##
-RUN mkdir -p /etc/pipewire/pipewire.conf.d && \
- mkdir -p /etc/wireplumber/wireplumber.conf.d
-
-COPY packages/configs/wireplumber.conf.d/* /etc/wireplumber/wireplumber.conf.d/
-COPY packages/configs/pipewire.conf.d/* /etc/pipewire/pipewire.conf.d/
-
-## MangoHud Config ##
-COPY packages/configs/MangoHud/MangoHud.conf /etc/nestri/configs/MangoHud/
-
-### Artifacts from Builder ###
-COPY --from=builder /artifacts/bin/nestri-server /usr/bin/
-COPY --from=builder /artifacts/bin/bwrap /usr/bin/
-COPY --from=builder /artifacts/lib/ /usr/lib/
-COPY --from=builder /artifacts/lib32/ /usr/lib32/
-COPY --from=builder /artifacts/lib64/ /usr/lib64/
-COPY --from=builder /artifacts/bin/vimputti-manager /usr/bin/
-
-### Scripts and Final Configuration ###
-COPY packages/scripts/ /etc/nestri/
-RUN chmod +x /etc/nestri/{envs.sh,entrypoint*.sh} && \
- chown -R "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}" && \
- sed -i 's/^#\(en_US\.UTF-8\)/\1/' /etc/locale.gen && \
- setcap cap_net_admin+ep /usr/bin/vimputti-manager && \
- dbus-uuidgen > /etc/machine-id && \
- LANG=en_US.UTF-8 locale-gen
diff --git a/containerfiles/steam-runner.Containerfile b/containerfiles/steam-runner.Containerfile
deleted file mode 100644
index 4840a0aa..00000000
--- a/containerfiles/steam-runner.Containerfile
+++ /dev/null
@@ -1,27 +0,0 @@
-# Container build arguments #
-ARG RUNNER_COMMON_IMAGE=runner-common:latest
-
-#*********************#
-# Final Runtime Stage #
-#*********************#
-FROM ${RUNNER_COMMON_IMAGE}
-
-### FLAVOR/VARIANT CONFIGURATION ###
-## STEAM ##
-RUN --mount=type=cache,target=/var/cache/pacman/pkg \
- pacman -S --noconfirm steam && \
- # Cleanup
- paccache -rk1 && \
- rm -rf /usr/share/{info,man,doc}/*
-
-## Steam Configs - Proton (Experimental flavor) ##
-RUN mkdir -p "${NESTRI_HOME}/.local/share/Steam/config"
-COPY packages/configs/steam/config.vdf "${NESTRI_HOME}/.local/share/Steam/config/"
-
-## FLAVOR/VARIANT LAUNCH COMMAND ##
-ENV NESTRI_LAUNCH_CMD="steam -tenfoot -cef-force-gpu"
-### END OF FLAVOR/VARIANT CONFIGURATION ###
-
-### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ###
-USER root
-ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"]
diff --git a/package.json b/package.json
deleted file mode 100644
index d889626a..00000000
--- a/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "nestri",
- "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"
- },
- "engines": {
- "node": ">=18"
- },
- "packageManager": "bun@1.2.4",
- "private": true,
- "scripts": {
- "format": "prettier --write \"**/*.{ts,tsx,md}\"",
- "sso": "aws sso login --sso-session=nestri --no-browser --use-device-code"
- },
- "trustedDependencies": [
- "core-js-pure",
- "esbuild",
- "protobufjs",
- "workerd"
- ],
- "workspaces": {
- "packages": [
- "apps/*",
- "packages/*",
- "cloud/packages/*"
- ],
- "catalog": {
- "@openauthjs/openauth": "0.0.0-20250322224806",
- "steam-session": "1.9.3"
- }
- },
- "dependencies": {
- "sst": "^3.17.13"
- }
-}
diff --git a/packages/configs/pipewire.conf.d/nestri-loopback.conf b/packages/configs/pipewire.conf.d/nestri-loopback.conf
deleted file mode 100644
index f7e647bf..00000000
--- a/packages/configs/pipewire.conf.d/nestri-loopback.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-context.modules = [
- {
- name = libpipewire-module-loopback
- args = {
- node.description = "Loopback"
- capture.props = {
- node.name = "Loopback Capture"
- media.class = "Audio/Sink"
- }
- playback.props = {
- node.name = "Loopback Playback"
- media.class = "Audio/Source"
- }
- }
- }
-]
\ No newline at end of file
diff --git a/packages/input/.containerignore b/packages/input/.containerignore
deleted file mode 100644
index 5a9fb257..00000000
--- a/packages/input/.containerignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.idea/
-dist/
-node_modules/
diff --git a/packages/input/package.json b/packages/input/package.json
deleted file mode 100644
index 2c4559a4..00000000
--- a/packages/input/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "@nestri/input",
- "version": "0.0.0",
- "private": true,
- "sideEffects": false,
- "exports": {
- ".": "./src/index.ts"
- },
- "devDependencies": {
- "@bufbuild/buf": "^1.59.0",
- "@bufbuild/protoc-gen-es": "^2.10.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/websockets": "^10.0.6",
- "@libp2p/webtransport": "^6.0.7",
- "@libp2p/utils": "^7.0.5",
- "@multiformats/multiaddr": "^13.0.1",
- "libp2p": "^3.0.6",
- "uint8arraylist": "^2.4.8"
- }
-}
\ No newline at end of file
diff --git a/packages/input/src/codes.ts b/packages/input/src/codes.ts
deleted file mode 100644
index 2d1cba67..00000000
--- a/packages/input/src/codes.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-export const keyCodeToLinuxEventCode: { [key: string]: number } = {
- KeyA: 30,
- KeyB: 48,
- KeyC: 46,
- KeyD: 32,
- KeyE: 18,
- KeyF: 33,
- KeyG: 34,
- KeyH: 35,
- KeyI: 23,
- KeyJ: 36,
- KeyK: 37,
- KeyL: 38,
- KeyM: 50,
- KeyN: 49,
- KeyO: 24,
- KeyP: 25,
- KeyQ: 16,
- KeyR: 19,
- KeyS: 31,
- KeyT: 20,
- KeyU: 22,
- KeyV: 47,
- KeyW: 17,
- KeyX: 45,
- KeyY: 21,
- KeyZ: 44,
- Digit1: 2,
- Digit2: 3,
- Digit3: 4,
- Digit4: 5,
- Digit5: 6,
- Digit6: 7,
- Digit7: 8,
- Digit8: 9,
- Digit9: 10,
- Digit0: 11,
- Enter: 28,
- Escape: 1,
- Backspace: 14,
- Tab: 15,
- Space: 57,
- Minus: 12,
- Equal: 13,
- BracketLeft: 26,
- BracketRight: 27,
- Backslash: 43,
- Semicolon: 39,
- Quote: 40,
- Backquote: 41,
- Comma: 51,
- Period: 52,
- Slash: 53,
- CapsLock: 58,
- F1: 59,
- F2: 60,
- F3: 61,
- F4: 62,
- F5: 63,
- F6: 64,
- F7: 65,
- F8: 66,
- F9: 67,
- F10: 68,
- F11: 87,
- F12: 88,
- Insert: 110,
- Delete: 111,
- ArrowUp: 103,
- ArrowDown: 108,
- ArrowLeft: 105,
- ArrowRight: 106,
- Home: 102,
- End: 107,
- PageUp: 104,
- PageDown: 109,
- NumLock: 69,
- ScrollLock: 70,
- Pause: 119,
- Numpad0: 82,
- Numpad1: 79,
- Numpad2: 80,
- Numpad3: 81,
- Numpad4: 75,
- Numpad5: 76,
- Numpad6: 77,
- Numpad7: 71,
- Numpad8: 72,
- Numpad9: 73,
- NumpadDivide: 98,
- NumpadMultiply: 55,
- NumpadSubtract: 74,
- NumpadAdd: 78,
- NumpadEnter: 96,
- NumpadDecimal: 83,
- ControlLeft: 29,
- ControlRight: 97,
- ShiftLeft: 42,
- ShiftRight: 54,
- AltLeft: 56,
- AltRight: 100,
- //'MetaLeft': 125, // Disabled as will break input
- //'MetaRight': 126, // Disabled as will break input
- ContextMenu: 127,
-};
-
-export const mouseButtonToLinuxEventCode: { [button: number]: number } = {
- 0: 272,
- 2: 273,
- 1: 274,
- 3: 275,
- 4: 276,
-};
-
-export const controllerButtonToLinuxEventCode: { [button: number]: number } = {
- 0: 0x130,
- 1: 0x131,
- 2: 0x134,
- 3: 0x133,
- 4: 0x136,
- 5: 0x137,
- 6: 0x138,
- 7: 0x139,
- 8: 0x13a,
- 9: 0x13b,
- 10: 0x13d,
- 11: 0x13e,
- 12: 0x220,
- 13: 0x221,
- 14: 0x222,
- 15: 0x223,
- 16: 0x13c,
-};
diff --git a/packages/input/src/controller.ts b/packages/input/src/controller.ts
deleted file mode 100644
index e1760945..00000000
--- a/packages/input/src/controller.ts
+++ /dev/null
@@ -1,531 +0,0 @@
-import { controllerButtonToLinuxEventCode } from "./codes";
-import { WebRTCStream } from "./webrtc-stream";
-import {
- ProtoControllerAttachSchema,
- ProtoControllerDetachSchema,
- ProtoControllerStateBatchSchema,
- ProtoControllerStateBatch,
- ProtoControllerRumble,
-} from "./proto/types_pb";
-import { create, toBinary, fromBinary } from "@bufbuild/protobuf";
-import { createMessage } from "./utils";
-import { ProtoMessageSchema } from "./proto/messages_pb";
-
-interface Props {
- webrtc: WebRTCStream;
- e: GamepadEvent;
-}
-
-interface GamepadState {
- previousButtonState: Map;
- buttonState: Map;
- leftTrigger: number;
- rightTrigger: number;
- leftX: number;
- leftY: number;
- rightX: number;
- rightY: number;
- dpadX: number;
- dpadY: number;
-}
-
-enum PollState {
- IDLE,
- RUNNING,
-}
-
-export class Controller {
- protected wrtc: WebRTCStream;
- protected connected: boolean = false;
- protected gamepad: Gamepad | null = null;
- protected state: GamepadState = {
- previousButtonState: new Map(),
- buttonState: new Map(),
- leftTrigger: 0,
- rightTrigger: 0,
- leftX: 0,
- leftY: 0,
- rightX: 0,
- rightY: 0,
- dpadX: 0,
- dpadY: 0,
- };
- // TODO: As user configurable, set quite low now for decent controllers (not Nintendo ones :P)
- protected stickDeadzone: number = 2048; // 2048 / 32768 = ~0.06 (6% of stick range)
-
- // Polling configuration
- private readonly FULL_RATE_MS = 10; // 100 UPS
- private readonly IDLE_THRESHOLD = 100; // ms before considering idle/hands off controller
- private readonly FULL_INTERVAL = 250; // ms before sending full state occassionally, to verify inputs are synced
-
- // Polling state
- private pollingState: PollState = PollState.IDLE;
- private lastInputTime: number = Date.now();
- private lastFullTime: number = Date.now();
- private pollInterval: any = null;
-
- // Controller batch vars
- private sequence: number = 0;
- private readonly CHANGED_BUTTONS_STATE = 1 << 0;
- private readonly CHANGED_LEFT_STICK_X = 1 << 1;
- private readonly CHANGED_LEFT_STICK_Y = 1 << 2;
- private readonly CHANGED_RIGHT_STICK_X = 1 << 3;
- private readonly CHANGED_RIGHT_STICK_Y = 1 << 4;
- private readonly CHANGED_LEFT_TRIGGER = 1 << 5;
- private readonly CHANGED_RIGHT_TRIGGER = 1 << 6;
- private readonly CHANGED_DPAD_X = 1 << 7;
- private readonly CHANGED_DPAD_Y = 1 << 8;
-
- private _dcHandler: ((data: ArrayBuffer) => void) | null = null;
-
- constructor({ webrtc, e }: Props) {
- this.wrtc = webrtc;
-
- // Get vendor of gamepad from id string (i.e. "... Vendor: 054c Product: 09cc")
- const vendorMatch = e.gamepad.id.match(/Vendor:\s?([0-9a-fA-F]{4})/);
- const vendorId = vendorMatch ? vendorMatch[1].toLowerCase() : "unknown";
- // Get product id of gamepad from id string
- const productMatch = e.gamepad.id.match(/Product:\s?([0-9a-fA-F]{4})/);
- const productId = productMatch ? productMatch[1].toLowerCase() : "unknown";
-
- // Listen to datachannel events from server
- this._dcHandler = (data: ArrayBuffer) => {
- if (!this.connected) return;
- try {
- // First decode the wrapper message
- const uint8Data = new Uint8Array(data);
- const messageWrapper = fromBinary(ProtoMessageSchema, uint8Data);
-
- if (messageWrapper.payload.case === "controllerRumble") {
- this.rumbleCallback(messageWrapper.payload.value);
- } else if (messageWrapper.payload.case === "controllerAttach") {
- if (this.gamepad) return; // already attached
- const attachMsg = messageWrapper.payload.value;
- // Gamepad connected succesfully
- this.gamepad = e.gamepad;
- console.log(
- `Gamepad connected: ${e.gamepad.id}, local slot ${e.gamepad.index}, msg: ${attachMsg.sessionSlot}`,
- );
- this.run();
- }
- } catch (err) {
- console.error("Error decoding datachannel message:", err);
- }
- };
- this.wrtc.addDataChannelCallback(this._dcHandler);
-
- const attachMsg = createMessage(
- create(ProtoControllerAttachSchema, {
- id: this.vendor_id_to_controller(vendorId, productId),
- sessionSlot: e.gamepad.index,
- sessionId: this.wrtc.getSessionID(),
- }),
- "controllerInput",
- );
- this.wrtc.sendBinary(toBinary(ProtoMessageSchema, attachMsg));
-
- this.run();
- }
-
- public getSlot(): number {
- return this.gamepad.index;
- }
-
- // Maps vendor id and product id to supported controller type
- // Currently supported: Sony (ps4, ps5), Microsoft (xbox360, xboxone), Nintendo (switchpro)
- // Default fallback to xbox360
- private vendor_id_to_controller(vendorId: string, productId: string): string {
- switch (vendorId) {
- case "054c": // Sony
- switch (productId) {
- case "0ce6":
- return "ps5";
- case "05c4":
- case "09cc":
- return "ps4";
- default:
- return "ps4"; // default to ps4
- }
- case "045e": // Microsoft
- switch (productId) {
- case "02d1":
- case "02dd":
- return "xboxone";
- case "028e":
- return "xbox360";
- default:
- return "xbox360"; // default to xbox360
- }
- case "057e": // Nintendo
- switch (productId) {
- case "2009":
- case "200e":
- return "switchpro";
- default:
- return "switchpro"; // default to switchpro
- }
- default: {
- return "xbox360";
- }
- }
- }
-
- private remapFromTo(
- value: number,
- fromMin: number,
- fromMax: number,
- toMin: number,
- toMax: number,
- ) {
- return ((value - fromMin) * (toMax - toMin)) / (fromMax - fromMin) + toMin;
- }
-
- private restartPolling() {
- // Clear existing interval
- if (this.pollInterval) {
- clearInterval(this.pollInterval);
- this.pollInterval = null;
- }
-
- // Restart with active polling
- this.pollingState = PollState.RUNNING;
- this.lastInputTime = Date.now();
-
- // Start interval
- this.pollInterval = setInterval(
- () => this.pollGamepad(),
- this.FULL_RATE_MS,
- );
- }
-
- private pollGamepad() {
- if (!this.connected || !this.gamepad) return;
-
- const gamepads = navigator.getGamepads();
- if (!gamepads[this.gamepad.index]) return;
-
- this.gamepad = gamepads[this.gamepad.index];
-
- // Collect state changes
- const changedFields = this.collectStateChanges();
-
- // Send batched changes update if there's changes
- if (changedFields > 0) {
- let send_type = 1;
- const timeSinceFull = Date.now() - this.lastFullTime;
- if (timeSinceFull > this.FULL_INTERVAL) {
- send_type = 0;
- this.lastFullTime = Date.now();
- }
-
- this.sendBatchedState(changedFields, send_type);
- this.lastInputTime = Date.now();
- if (this.pollingState !== PollState.RUNNING) {
- this.pollingState = PollState.RUNNING;
- }
- }
-
- const timeSinceInput = Date.now() - this.lastInputTime;
- if (timeSinceInput > this.IDLE_THRESHOLD) {
- // Changing from running to idle..
- if (this.pollingState === PollState.RUNNING) {
- // Send full state on idle assumption
- this.sendBatchedState(0xff, 0);
- this.pollingState = PollState.IDLE;
- }
- }
-
- this.state.buttonState.forEach((b, i) =>
- this.state.previousButtonState.set(i, b),
- );
- }
-
- private collectStateChanges(): number {
- let changedFields = 0;
-
- // Collect analog values
- const leftTrigger = Math.round(
- this.remapFromTo(
- this.gamepad.buttons[6]?.value ?? 0,
- 0,
- 1,
- -32768,
- 32767,
- ),
- );
- const rightTrigger = Math.round(
- this.remapFromTo(
- this.gamepad.buttons[7]?.value ?? 0,
- 0,
- 1,
- -32768,
- 32767,
- ),
- );
-
- const leftX = this.remapFromTo(
- this.gamepad.axes[0] ?? 0,
- -1,
- 1,
- -32768,
- 32767,
- );
- const leftY = this.remapFromTo(
- this.gamepad.axes[1] ?? 0,
- -1,
- 1,
- -32768,
- 32767,
- );
- const sendLeftX =
- Math.abs(leftX) > this.stickDeadzone ? Math.round(leftX) : 0;
- const sendLeftY =
- Math.abs(leftY) > this.stickDeadzone ? Math.round(leftY) : 0;
-
- const rightX = this.remapFromTo(
- this.gamepad.axes[2] ?? 0,
- -1,
- 1,
- -32768,
- 32767,
- );
- const rightY = this.remapFromTo(
- this.gamepad.axes[3] ?? 0,
- -1,
- 1,
- -32768,
- 32767,
- );
- const sendRightX =
- Math.abs(rightX) > this.stickDeadzone ? Math.round(rightX) : 0;
- const sendRightY =
- Math.abs(rightY) > this.stickDeadzone ? Math.round(rightY) : 0;
-
- const dpadX =
- (this.gamepad.buttons[14]?.pressed ? -1 : 0) +
- (this.gamepad.buttons[15]?.pressed ? 1 : 0);
- const dpadY =
- (this.gamepad.buttons[12]?.pressed ? -1 : 0) +
- (this.gamepad.buttons[13]?.pressed ? 1 : 0);
-
- // Check what changed
- for (let i = 0; i < this.gamepad.buttons.length; i++) {
- if (i >= 6 && i <= 7) continue; // Skip triggers
- if (i >= 12 && i <= 15) continue; // Skip d-pad
- if (this.state.buttonState.get(i) !== this.gamepad.buttons[i].pressed) {
- changedFields |= this.CHANGED_BUTTONS_STATE;
- }
- this.state.buttonState.set(i, this.gamepad.buttons[i].pressed);
- }
- if (leftTrigger !== this.state.leftTrigger) {
- changedFields |= this.CHANGED_LEFT_TRIGGER;
- }
- this.state.leftTrigger = leftTrigger;
- if (rightTrigger !== this.state.rightTrigger) {
- changedFields |= this.CHANGED_RIGHT_TRIGGER;
- }
- this.state.rightTrigger = rightTrigger;
- if (sendLeftX !== this.state.leftX) {
- changedFields |= this.CHANGED_LEFT_STICK_X;
- }
- this.state.leftX = sendLeftX;
- if (sendLeftY !== this.state.leftY) {
- changedFields |= this.CHANGED_LEFT_STICK_Y;
- }
- this.state.leftY = sendLeftY;
- if (sendRightX !== this.state.rightX) {
- changedFields |= this.CHANGED_RIGHT_STICK_X;
- }
- this.state.rightX = sendRightX;
- if (sendRightY !== this.state.rightY) {
- changedFields |= this.CHANGED_RIGHT_STICK_Y;
- }
- this.state.rightY = sendRightY;
- if (dpadX !== this.state.dpadX) {
- changedFields |= this.CHANGED_DPAD_X;
- }
- this.state.dpadX = dpadX;
- if (dpadY !== this.state.dpadY) {
- changedFields |= this.CHANGED_DPAD_Y;
- }
- this.state.dpadY = dpadY;
-
- return changedFields;
- }
-
- private sendBatchedState(changedFields: number, updateType: number) {
- // @ts-ignore
- let message: ProtoControllerStateBatch = {
- sessionSlot: this.gamepad.index,
- sessionId: this.wrtc.getSessionID(),
- updateType: updateType,
- sequence: this.sequence++,
- };
-
- // For FULL_STATE, include everything
- if (updateType === 0) {
- message.changedFields = 0xff;
-
- message.buttonChangedMask = Object.fromEntries(
- Array.from(this.state.buttonState)
- .map(
- ([key, value]) =>
- [this.controllerButtonToVirtualKeyCode(key), value] as const,
- )
- .filter(([code]) => code !== undefined),
- );
- message.leftStickX = this.state.leftX;
- message.leftStickY = this.state.leftY;
- message.rightStickX = this.state.rightX;
- message.rightStickY = this.state.rightY;
- message.leftTrigger = this.state.leftTrigger;
- message.rightTrigger = this.state.rightTrigger;
- message.dpadX = this.state.dpadX;
- message.dpadY = this.state.dpadY;
- }
- // For DELTA, only include changed fields
- else {
- message.changedFields = changedFields;
-
- if (changedFields & this.CHANGED_BUTTONS_STATE) {
- const currentStateMap = this.state.buttonState;
- const previousStateMap = this.state.previousButtonState;
- const allKeys = new Set([
- // @ts-ignore
- ...currentStateMap.keys(),
- // @ts-ignore
- ...previousStateMap.keys(),
- ]);
- message.buttonChangedMask = Object.fromEntries(
- Array.from(allKeys)
- .filter((key) => {
- const newState = currentStateMap.get(key);
- const oldState = previousStateMap.get(key);
- return newState !== oldState;
- })
- .map((key) => {
- const newValue = currentStateMap.get(key) ?? false;
- return [
- this.controllerButtonToVirtualKeyCode(key),
- newValue,
- ] as const;
- })
- .filter(([code]) => code !== undefined),
- );
- }
- if (changedFields & this.CHANGED_LEFT_STICK_X) {
- message.leftStickX = this.state.leftX;
- }
- if (changedFields & this.CHANGED_LEFT_STICK_Y) {
- message.leftStickY = this.state.leftY;
- }
- if (changedFields & this.CHANGED_RIGHT_STICK_X) {
- message.rightStickX = this.state.rightX;
- }
- if (changedFields & this.CHANGED_RIGHT_STICK_Y) {
- message.rightStickY = this.state.rightY;
- }
- if (changedFields & this.CHANGED_LEFT_TRIGGER) {
- message.leftTrigger = this.state.leftTrigger;
- }
- if (changedFields & this.CHANGED_RIGHT_TRIGGER) {
- message.rightTrigger = this.state.rightTrigger;
- }
- if (changedFields & this.CHANGED_DPAD_X) {
- message.dpadX = this.state.dpadX;
- }
- if (changedFields & this.CHANGED_DPAD_Y) {
- message.dpadY = this.state.dpadY;
- }
- }
-
- // Send message
- const batchMessage = createMessage(
- create(
- ProtoControllerStateBatchSchema,
- message as ProtoControllerStateBatch,
- ),
- "controllerInput",
- );
- this.wrtc.sendBinary(toBinary(ProtoMessageSchema, batchMessage));
- }
-
- public run() {
- if (this.connected) this.stop();
-
- this.connected = true;
-
- // Start with active polling
- this.restartPolling();
- }
-
- public stop() {
- if (this.pollInterval) {
- clearInterval(this.pollInterval);
- this.pollInterval = null;
- }
- this.connected = false;
- }
-
- public dispose() {
- this.stop();
- // Remove callback
- if (this._dcHandler !== null) {
- this.wrtc.removeDataChannelCallback(this._dcHandler);
- this._dcHandler = null;
- }
- if (this.gamepad) {
- // Gamepad disconnected
- const detachMsg = createMessage(
- create(ProtoControllerDetachSchema, {
- sessionSlot: this.gamepad.index,
- }),
- "controllerInput",
- );
- this.wrtc.sendBinary(toBinary(ProtoMessageSchema, detachMsg));
- }
- }
-
- private controllerButtonToVirtualKeyCode(code: number): number | undefined {
- return controllerButtonToLinuxEventCode[code] || undefined;
- }
-
- private rumbleCallback(rumbleMsg: ProtoControllerRumble) {
- if (!this.connected || !this.gamepad) return;
-
- // Check if this rumble is for us
- if (
- rumbleMsg.sessionId !== this.wrtc.getSessionID() ||
- rumbleMsg.sessionSlot !== this.gamepad.index
- )
- return;
-
- // Trigger actual rumble
- // Need to remap from 0-65535 to 0.0-1.0 ranges
- const clampedLowFreq = Math.max(0, Math.min(65535, rumbleMsg.lowFrequency));
- const rumbleLowFreq = this.remapFromTo(clampedLowFreq, 0, 65535, 0.0, 1.0);
- const clampedHighFreq = Math.max(
- 0,
- Math.min(65535, rumbleMsg.highFrequency),
- );
- const rumbleHighFreq = this.remapFromTo(
- clampedHighFreq,
- 0,
- 65535,
- 0.0,
- 1.0,
- );
- // Cap to valid range (max 5000)
- const rumbleDuration = Math.max(0, Math.min(5000, rumbleMsg.duration));
- if (this.gamepad.vibrationActuator) {
- this.gamepad.vibrationActuator
- .playEffect("dual-rumble", {
- startDelay: 0,
- duration: rumbleDuration,
- weakMagnitude: rumbleLowFreq,
- strongMagnitude: rumbleHighFreq,
- })
- .catch(console.error);
- }
- }
-}
diff --git a/packages/input/src/index.ts b/packages/input/src/index.ts
deleted file mode 100644
index d0c1c511..00000000
--- a/packages/input/src/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from "./keyboard"
-export * from "./mouse"
-export * from "./controller"
-export * from "./webrtc-stream"
\ No newline at end of file
diff --git a/packages/input/src/keyboard.ts b/packages/input/src/keyboard.ts
deleted file mode 100644
index c7242a0a..00000000
--- a/packages/input/src/keyboard.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import { keyCodeToLinuxEventCode } from "./codes";
-import { WebRTCStream } from "./webrtc-stream";
-import { ProtoKeyDownSchema, ProtoKeyUpSchema } from "./proto/types_pb";
-import { create, toBinary } from "@bufbuild/protobuf";
-import { createMessage } from "./utils";
-import { ProtoMessageSchema } from "./proto/messages_pb";
-
-interface Props {
- webrtc: WebRTCStream;
-}
-
-export class Keyboard {
- protected wrtc: WebRTCStream;
- protected connected!: boolean;
-
- // Store references to event listeners
- private readonly keydownListener: (e: KeyboardEvent) => void;
- private readonly keyupListener: (e: KeyboardEvent) => void;
-
- constructor({ webrtc }: Props) {
- this.wrtc = webrtc;
- this.keydownListener = this.createKeyboardListener((e: any) =>
- create(ProtoKeyDownSchema, {
- key: this.keyToVirtualKeyCode(e.code),
- }),
- );
- this.keyupListener = this.createKeyboardListener((e: any) =>
- create(ProtoKeyUpSchema, {
- key: this.keyToVirtualKeyCode(e.code),
- }),
- );
- this.run();
- }
-
- private run() {
- if (this.connected) this.stop();
-
- this.connected = true;
- document.addEventListener("keydown", this.keydownListener);
- document.addEventListener("keyup", this.keyupListener);
- }
-
- private stop() {
- document.removeEventListener("keydown", this.keydownListener);
- document.removeEventListener("keyup", this.keyupListener);
- this.connected = false;
- }
-
- // Helper function to create and return mouse listeners
- private createKeyboardListener(
- dataCreator: (e: Event) => any,
- ): (e: Event) => void {
- return (e: Event) => {
- e.preventDefault();
- e.stopPropagation();
- // Prevent repeated key events from being sent (important for games)
- if ((e as any).repeat) return;
-
- const data = dataCreator(e as any);
-
- const message = createMessage(data, "input");
- this.wrtc.sendBinary(toBinary(ProtoMessageSchema, message));
- };
- }
-
- public dispose() {
- this.stop();
- this.connected = false;
- }
-
- private keyToVirtualKeyCode(code: string) {
- // Treat Home key as Escape - TODO: Make user-configurable
- if (code === "Home") return 1;
- return keyCodeToLinuxEventCode[code] || 0;
- }
-}
diff --git a/packages/input/src/latency.ts b/packages/input/src/latency.ts
deleted file mode 100644
index 3c97ceb2..00000000
--- a/packages/input/src/latency.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-type TimestampEntry = {
- stage: string;
- time: Date;
-};
-
-export class LatencyTracker {
- sequence_id: string;
- timestamps: TimestampEntry[];
-
- constructor(sequence_id: string, timestamps: TimestampEntry[] = []) {
- this.sequence_id = sequence_id;
- this.timestamps = timestamps;
- }
-
- addTimestamp(stage: string): void {
- const timestamp: TimestampEntry = {
- stage,
- time: new Date(),
- };
- this.timestamps.push(timestamp);
- }
-
- // Calculates the total time between the first and last recorded timestamps.
- getTotalLatency(): number {
- if (this.timestamps.length < 2) return 0;
-
- const times = this.timestamps.map((entry) => entry.time.getTime());
- const minTime = Math.min(...times);
- const maxTime = Math.max(...times);
- return maxTime - minTime;
- }
-
- toJSON(): Record {
- return {
- sequence_id: this.sequence_id,
- timestamps: this.timestamps.map((entry) => ({
- stage: entry.stage,
- // Fill nanoseconds with zeros to match the expected format
- time: entry.time.toISOString().replace(/\.(\d+)Z$/, ".$1000000Z"),
- })),
- };
- }
-
- static fromJSON(json: any): LatencyTracker {
- const timestamps: TimestampEntry[] = json.timestamps.map((ts: any) => ({
- stage: ts.stage,
- time: new Date(ts.time),
- }));
- return new LatencyTracker(json.sequence_id, timestamps);
- }
-}
diff --git a/packages/input/src/mouse.ts b/packages/input/src/mouse.ts
deleted file mode 100644
index ea3d43e8..00000000
--- a/packages/input/src/mouse.ts
+++ /dev/null
@@ -1,140 +0,0 @@
-import { WebRTCStream } from "./webrtc-stream";
-import {
- ProtoMouseKeyDownSchema,
- ProtoMouseKeyUpSchema,
- ProtoMouseMoveSchema,
- ProtoMouseWheelSchema,
-} from "./proto/types_pb";
-import { mouseButtonToLinuxEventCode } from "./codes";
-import { create, toBinary } from "@bufbuild/protobuf";
-import { createMessage } from "./utils";
-import { ProtoMessageSchema } from "./proto/messages_pb";
-
-interface Props {
- webrtc: WebRTCStream;
- canvas: HTMLCanvasElement;
-}
-
-export class Mouse {
- protected wrtc: WebRTCStream;
- protected canvas: HTMLCanvasElement;
- protected connected!: boolean;
-
- private sendInterval = 10; // 100 updates per second
-
- // Store references to event listeners
- private readonly mousemoveListener: (e: MouseEvent) => void;
- private movementX: number = 0;
- private movementY: number = 0;
-
- private readonly mousedownListener: (e: MouseEvent) => void;
- private readonly mouseupListener: (e: MouseEvent) => void;
- private readonly mousewheelListener: (e: WheelEvent) => void;
-
- constructor({ webrtc, canvas }: Props) {
- this.wrtc = webrtc;
- this.canvas = canvas;
-
- this.mousemoveListener = (e: MouseEvent) => {
- e.preventDefault();
- e.stopPropagation();
- this.movementX += e.movementX;
- this.movementY += e.movementY;
- };
-
- this.mousedownListener = this.createMouseListener((e: any) =>
- create(ProtoMouseKeyDownSchema, {
- key: this.keyToVirtualKeyCode(e.button),
- }),
- );
- this.mouseupListener = this.createMouseListener((e: any) =>
- create(ProtoMouseKeyUpSchema, {
- key: this.keyToVirtualKeyCode(e.button),
- }),
- );
- this.mousewheelListener = this.createMouseListener((e: any) =>
- create(ProtoMouseWheelSchema, {
- x: Math.round(e.deltaX),
- y: Math.round(e.deltaY),
- }),
- );
-
- this.run();
- this.startProcessing();
- }
-
- private run() {
- //calls all the other functions
- if (!document.pointerLockElement) {
- console.log("no pointerlock");
- if (this.connected) {
- this.stop();
- }
- return;
- }
-
- if (document.pointerLockElement == this.canvas) {
- this.connected = true;
- this.canvas.addEventListener("mousemove", this.mousemoveListener);
- this.canvas.addEventListener("mousedown", this.mousedownListener);
- this.canvas.addEventListener("mouseup", this.mouseupListener);
- this.canvas.addEventListener("wheel", this.mousewheelListener);
- } else {
- if (this.connected) {
- this.stop();
- }
- }
- }
-
- private stop() {
- this.canvas.removeEventListener("mousemove", this.mousemoveListener);
- this.canvas.removeEventListener("mousedown", this.mousedownListener);
- this.canvas.removeEventListener("mouseup", this.mouseupListener);
- this.canvas.removeEventListener("wheel", this.mousewheelListener);
- this.connected = false;
- }
-
- private startProcessing() {
- setInterval(() => {
- if (this.connected) {
- this.sendAggregatedMouseMove();
- this.movementX = 0;
- this.movementY = 0;
- }
- }, this.sendInterval);
- }
-
- private sendAggregatedMouseMove() {
- const data = create(ProtoMouseMoveSchema, {
- x: Math.round(this.movementX),
- y: Math.round(this.movementY),
- });
-
- const message = createMessage(data, "input");
- this.wrtc.sendBinary(toBinary(ProtoMessageSchema, message));
- }
-
- // Helper function to create and return mouse listeners
- private createMouseListener(
- dataCreator: (e: Event) => any,
- ): (e: Event) => void {
- return (e: Event) => {
- e.preventDefault();
- e.stopPropagation();
- const data = dataCreator(e as any);
-
- const message = createMessage(data, "input");
- this.wrtc.sendBinary(toBinary(ProtoMessageSchema, message));
- };
- }
-
- public dispose() {
- document.exitPointerLock();
- this.stop();
- this.connected = false;
- }
-
- private keyToVirtualKeyCode(code: number) {
- return mouseButtonToLinuxEventCode[code] || undefined;
- }
-}
diff --git a/packages/input/src/proto/latency_tracker_pb.ts b/packages/input/src/proto/latency_tracker_pb.ts
deleted file mode 100644
index b594b72f..00000000
--- a/packages/input/src/proto/latency_tracker_pb.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// @generated by protoc-gen-es v2.10.1 with parameter "target=ts"
-// @generated from file latency_tracker.proto (package proto, syntax proto3)
-/* eslint-disable */
-
-import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
-import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
-import type { Timestamp } from "@bufbuild/protobuf/wkt";
-import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
-import type { Message } from "@bufbuild/protobuf";
-
-/**
- * Describes the file latency_tracker.proto.
- */
-export const file_latency_tracker: GenFile = /*@__PURE__*/
- fileDesc("ChVsYXRlbmN5X3RyYWNrZXIucHJvdG8SBXByb3RvIk4KE1Byb3RvVGltZXN0YW1wRW50cnkSDQoFc3RhZ2UYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiWgoTUHJvdG9MYXRlbmN5VHJhY2tlchITCgtzZXF1ZW5jZV9pZBgBIAEoCRIuCgp0aW1lc3RhbXBzGAIgAygLMhoucHJvdG8uUHJvdG9UaW1lc3RhbXBFbnRyeUIWWhRyZWxheS9pbnRlcm5hbC9wcm90b2IGcHJvdG8z", [file_google_protobuf_timestamp]);
-
-/**
- * @generated from message proto.ProtoTimestampEntry
- */
-export type ProtoTimestampEntry = Message<"proto.ProtoTimestampEntry"> & {
- /**
- * @generated from field: string stage = 1;
- */
- stage: string;
-
- /**
- * @generated from field: google.protobuf.Timestamp time = 2;
- */
- time?: Timestamp;
-};
-
-/**
- * Describes the message proto.ProtoTimestampEntry.
- * Use `create(ProtoTimestampEntrySchema)` to create a new message.
- */
-export const ProtoTimestampEntrySchema: GenMessage = /*@__PURE__*/
- messageDesc(file_latency_tracker, 0);
-
-/**
- * @generated from message proto.ProtoLatencyTracker
- */
-export type ProtoLatencyTracker = Message<"proto.ProtoLatencyTracker"> & {
- /**
- * @generated from field: string sequence_id = 1;
- */
- sequenceId: string;
-
- /**
- * @generated from field: repeated proto.ProtoTimestampEntry timestamps = 2;
- */
- timestamps: ProtoTimestampEntry[];
-};
-
-/**
- * Describes the message proto.ProtoLatencyTracker.
- * Use `create(ProtoLatencyTrackerSchema)` to create a new message.
- */
-export const ProtoLatencyTrackerSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_latency_tracker, 1);
-
diff --git a/packages/input/src/proto/messages_pb.ts b/packages/input/src/proto/messages_pb.ts
deleted file mode 100644
index eb622321..00000000
--- a/packages/input/src/proto/messages_pb.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-// @generated by protoc-gen-es v2.10.1 with parameter "target=ts"
-// @generated from file messages.proto (package proto, syntax proto3)
-/* eslint-disable */
-
-import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
-import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
-import type { ProtoClientDisconnected, ProtoClientRequestRoomStream, ProtoControllerAttach, ProtoControllerDetach, ProtoControllerRumble, ProtoControllerStateBatch, ProtoICE, ProtoKeyDown, ProtoKeyUp, ProtoMouseKeyDown, ProtoMouseKeyUp, ProtoMouseMove, ProtoMouseMoveAbs, ProtoMouseWheel, ProtoRaw, ProtoSDP, ProtoServerPushStream } from "./types_pb";
-import { file_types } from "./types_pb";
-import type { ProtoLatencyTracker } from "./latency_tracker_pb";
-import { file_latency_tracker } from "./latency_tracker_pb";
-import type { Message } from "@bufbuild/protobuf";
-
-/**
- * Describes the file messages.proto.
- */
-export const file_messages: GenFile = /*@__PURE__*/
- fileDesc("Cg5tZXNzYWdlcy5wcm90bxIFcHJvdG8iVQoQUHJvdG9NZXNzYWdlQmFzZRIUCgxwYXlsb2FkX3R5cGUYASABKAkSKwoHbGF0ZW5jeRgCIAEoCzIaLnByb3RvLlByb3RvTGF0ZW5jeVRyYWNrZXIipQcKDFByb3RvTWVzc2FnZRItCgxtZXNzYWdlX2Jhc2UYASABKAsyFy5wcm90by5Qcm90b01lc3NhZ2VCYXNlEisKCm1vdXNlX21vdmUYAiABKAsyFS5wcm90by5Qcm90b01vdXNlTW92ZUgAEjIKDm1vdXNlX21vdmVfYWJzGAMgASgLMhgucHJvdG8uUHJvdG9Nb3VzZU1vdmVBYnNIABItCgttb3VzZV93aGVlbBgEIAEoCzIWLnByb3RvLlByb3RvTW91c2VXaGVlbEgAEjIKDm1vdXNlX2tleV9kb3duGAUgASgLMhgucHJvdG8uUHJvdG9Nb3VzZUtleURvd25IABIuCgxtb3VzZV9rZXlfdXAYBiABKAsyFi5wcm90by5Qcm90b01vdXNlS2V5VXBIABInCghrZXlfZG93bhgHIAEoCzITLnByb3RvLlByb3RvS2V5RG93bkgAEiMKBmtleV91cBgIIAEoCzIRLnByb3RvLlByb3RvS2V5VXBIABI5ChFjb250cm9sbGVyX2F0dGFjaBgJIAEoCzIcLnByb3RvLlByb3RvQ29udHJvbGxlckF0dGFjaEgAEjkKEWNvbnRyb2xsZXJfZGV0YWNoGAogASgLMhwucHJvdG8uUHJvdG9Db250cm9sbGVyRGV0YWNoSAASOQoRY29udHJvbGxlcl9ydW1ibGUYCyABKAsyHC5wcm90by5Qcm90b0NvbnRyb2xsZXJSdW1ibGVIABJCChZjb250cm9sbGVyX3N0YXRlX2JhdGNoGAwgASgLMiAucHJvdG8uUHJvdG9Db250cm9sbGVyU3RhdGVCYXRjaEgAEh4KA2ljZRgUIAEoCzIPLnByb3RvLlByb3RvSUNFSAASHgoDc2RwGBUgASgLMg8ucHJvdG8uUHJvdG9TRFBIABIeCgNyYXcYFiABKAsyDy5wcm90by5Qcm90b1Jhd0gAEkkKGmNsaWVudF9yZXF1ZXN0X3Jvb21fc3RyZWFtGBcgASgLMiMucHJvdG8uUHJvdG9DbGllbnRSZXF1ZXN0Um9vbVN0cmVhbUgAEj0KE2NsaWVudF9kaXNjb25uZWN0ZWQYGCABKAsyHi5wcm90by5Qcm90b0NsaWVudERpc2Nvbm5lY3RlZEgAEjoKEnNlcnZlcl9wdXNoX3N0cmVhbRgZIAEoCzIcLnByb3RvLlByb3RvU2VydmVyUHVzaFN0cmVhbUgAQgkKB3BheWxvYWRCFloUcmVsYXkvaW50ZXJuYWwvcHJvdG9iBnByb3RvMw", [file_types, file_latency_tracker]);
-
-/**
- * @generated from message proto.ProtoMessageBase
- */
-export type ProtoMessageBase = Message<"proto.ProtoMessageBase"> & {
- /**
- * @generated from field: string payload_type = 1;
- */
- payloadType: string;
-
- /**
- * @generated from field: proto.ProtoLatencyTracker latency = 2;
- */
- latency?: ProtoLatencyTracker;
-};
-
-/**
- * Describes the message proto.ProtoMessageBase.
- * Use `create(ProtoMessageBaseSchema)` to create a new message.
- */
-export const ProtoMessageBaseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_messages, 0);
-
-/**
- * @generated from message proto.ProtoMessage
- */
-export type ProtoMessage = Message<"proto.ProtoMessage"> & {
- /**
- * @generated from field: proto.ProtoMessageBase message_base = 1;
- */
- messageBase?: ProtoMessageBase;
-
- /**
- * @generated from oneof proto.ProtoMessage.payload
- */
- payload: {
- /**
- * Input types
- *
- * @generated from field: proto.ProtoMouseMove mouse_move = 2;
- */
- value: ProtoMouseMove;
- case: "mouseMove";
- } | {
- /**
- * @generated from field: proto.ProtoMouseMoveAbs mouse_move_abs = 3;
- */
- value: ProtoMouseMoveAbs;
- case: "mouseMoveAbs";
- } | {
- /**
- * @generated from field: proto.ProtoMouseWheel mouse_wheel = 4;
- */
- value: ProtoMouseWheel;
- case: "mouseWheel";
- } | {
- /**
- * @generated from field: proto.ProtoMouseKeyDown mouse_key_down = 5;
- */
- value: ProtoMouseKeyDown;
- case: "mouseKeyDown";
- } | {
- /**
- * @generated from field: proto.ProtoMouseKeyUp mouse_key_up = 6;
- */
- value: ProtoMouseKeyUp;
- case: "mouseKeyUp";
- } | {
- /**
- * @generated from field: proto.ProtoKeyDown key_down = 7;
- */
- value: ProtoKeyDown;
- case: "keyDown";
- } | {
- /**
- * ProtoClipboard clipboard = 9;
- *
- * @generated from field: proto.ProtoKeyUp key_up = 8;
- */
- value: ProtoKeyUp;
- case: "keyUp";
- } | {
- /**
- * Controller input types
- *
- * @generated from field: proto.ProtoControllerAttach controller_attach = 9;
- */
- value: ProtoControllerAttach;
- case: "controllerAttach";
- } | {
- /**
- * @generated from field: proto.ProtoControllerDetach controller_detach = 10;
- */
- value: ProtoControllerDetach;
- case: "controllerDetach";
- } | {
- /**
- * @generated from field: proto.ProtoControllerRumble controller_rumble = 11;
- */
- value: ProtoControllerRumble;
- case: "controllerRumble";
- } | {
- /**
- * @generated from field: proto.ProtoControllerStateBatch controller_state_batch = 12;
- */
- value: ProtoControllerStateBatch;
- case: "controllerStateBatch";
- } | {
- /**
- * Signaling types
- *
- * @generated from field: proto.ProtoICE ice = 20;
- */
- value: ProtoICE;
- case: "ice";
- } | {
- /**
- * @generated from field: proto.ProtoSDP sdp = 21;
- */
- value: ProtoSDP;
- case: "sdp";
- } | {
- /**
- * @generated from field: proto.ProtoRaw raw = 22;
- */
- value: ProtoRaw;
- case: "raw";
- } | {
- /**
- * @generated from field: proto.ProtoClientRequestRoomStream client_request_room_stream = 23;
- */
- value: ProtoClientRequestRoomStream;
- case: "clientRequestRoomStream";
- } | {
- /**
- * @generated from field: proto.ProtoClientDisconnected client_disconnected = 24;
- */
- value: ProtoClientDisconnected;
- case: "clientDisconnected";
- } | {
- /**
- * @generated from field: proto.ProtoServerPushStream server_push_stream = 25;
- */
- value: ProtoServerPushStream;
- case: "serverPushStream";
- } | { case: undefined; value?: undefined };
-};
-
-/**
- * Describes the message proto.ProtoMessage.
- * Use `create(ProtoMessageSchema)` to create a new message.
- */
-export const ProtoMessageSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_messages, 1);
-
diff --git a/packages/input/src/proto/types_pb.ts b/packages/input/src/proto/types_pb.ts
deleted file mode 100644
index bac7de3d..00000000
--- a/packages/input/src/proto/types_pb.ts
+++ /dev/null
@@ -1,590 +0,0 @@
-// @generated by protoc-gen-es v2.10.1 with parameter "target=ts"
-// @generated from file types.proto (package proto, syntax proto3)
-/* eslint-disable */
-
-import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
-import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
-import type { Message } from "@bufbuild/protobuf";
-
-/**
- * Describes the file types.proto.
- */
-export const file_types: GenFile = /*@__PURE__*/
- fileDesc("Cgt0eXBlcy5wcm90bxIFcHJvdG8iJgoOUHJvdG9Nb3VzZU1vdmUSCQoBeBgBIAEoBRIJCgF5GAIgASgFIikKEVByb3RvTW91c2VNb3ZlQWJzEgkKAXgYASABKAUSCQoBeRgCIAEoBSInCg9Qcm90b01vdXNlV2hlZWwSCQoBeBgBIAEoBRIJCgF5GAIgASgFIiAKEVByb3RvTW91c2VLZXlEb3duEgsKA2tleRgBIAEoBSIeCg9Qcm90b01vdXNlS2V5VXASCwoDa2V5GAEgASgFIhsKDFByb3RvS2V5RG93bhILCgNrZXkYASABKAUiGQoKUHJvdG9LZXlVcBILCgNrZXkYASABKAUiTQoVUHJvdG9Db250cm9sbGVyQXR0YWNoEgoKAmlkGAEgASgJEhQKDHNlc3Npb25fc2xvdBgCIAEoBRISCgpzZXNzaW9uX2lkGAMgASgJIkEKFVByb3RvQ29udHJvbGxlckRldGFjaBIUCgxzZXNzaW9uX3Nsb3QYASABKAUSEgoKc2Vzc2lvbl9pZBgCIAEoCSKCAQoVUHJvdG9Db250cm9sbGVyUnVtYmxlEhQKDHNlc3Npb25fc2xvdBgBIAEoBRISCgpzZXNzaW9uX2lkGAIgASgJEhUKDWxvd19mcmVxdWVuY3kYAyABKAUSFgoOaGlnaF9mcmVxdWVuY3kYBCABKAUSEAoIZHVyYXRpb24YBSABKAUi0AUKGVByb3RvQ29udHJvbGxlclN0YXRlQmF0Y2gSFAoMc2Vzc2lvbl9zbG90GAEgASgFEhIKCnNlc3Npb25faWQYAiABKAkSQAoLdXBkYXRlX3R5cGUYAyABKA4yKy5wcm90by5Qcm90b0NvbnRyb2xsZXJTdGF0ZUJhdGNoLlVwZGF0ZVR5cGUSEAoIc2VxdWVuY2UYBCABKA0SVAoTYnV0dG9uX2NoYW5nZWRfbWFzaxgFIAMoCzI3LnByb3RvLlByb3RvQ29udHJvbGxlclN0YXRlQmF0Y2guQnV0dG9uQ2hhbmdlZE1hc2tFbnRyeRIZCgxsZWZ0X3N0aWNrX3gYBiABKAVIAIgBARIZCgxsZWZ0X3N0aWNrX3kYByABKAVIAYgBARIaCg1yaWdodF9zdGlja194GAggASgFSAKIAQESGgoNcmlnaHRfc3RpY2tfeRgJIAEoBUgDiAEBEhkKDGxlZnRfdHJpZ2dlchgKIAEoBUgEiAEBEhoKDXJpZ2h0X3RyaWdnZXIYCyABKAVIBYgBARITCgZkcGFkX3gYDCABKAVIBogBARITCgZkcGFkX3kYDSABKAVIB4gBARIbCg5jaGFuZ2VkX2ZpZWxkcxgOIAEoDUgIiAEBGjgKFkJ1dHRvbkNoYW5nZWRNYXNrRW50cnkSCwoDa2V5GAEgASgFEg0KBXZhbHVlGAIgASgIOgI4ASInCgpVcGRhdGVUeXBlEg4KCkZVTExfU1RBVEUQABIJCgVERUxUQRABQg8KDV9sZWZ0X3N0aWNrX3hCDwoNX2xlZnRfc3RpY2tfeUIQCg5fcmlnaHRfc3RpY2tfeEIQCg5fcmlnaHRfc3RpY2tfeUIPCg1fbGVmdF90cmlnZ2VyQhAKDl9yaWdodF90cmlnZ2VyQgkKB19kcGFkX3hCCQoHX2RwYWRfeUIRCg9fY2hhbmdlZF9maWVsZHMiqgEKE1JUQ0ljZUNhbmRpZGF0ZUluaXQSEQoJY2FuZGlkYXRlGAEgASgJEhoKDXNkcE1MaW5lSW5kZXgYAiABKA1IAIgBARITCgZzZHBNaWQYAyABKAlIAYgBARIdChB1c2VybmFtZUZyYWdtZW50GAQgASgJSAKIAQFCEAoOX3NkcE1MaW5lSW5kZXhCCQoHX3NkcE1pZEITChFfdXNlcm5hbWVGcmFnbWVudCI2ChlSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0EgsKA3NkcBgBIAEoCRIMCgR0eXBlGAIgASgJIjkKCFByb3RvSUNFEi0KCWNhbmRpZGF0ZRgBIAEoCzIaLnByb3RvLlJUQ0ljZUNhbmRpZGF0ZUluaXQiOQoIUHJvdG9TRFASLQoDc2RwGAEgASgLMiAucHJvdG8uUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCIYCghQcm90b1JhdxIMCgRkYXRhGAEgASgJIkUKHFByb3RvQ2xpZW50UmVxdWVzdFJvb21TdHJlYW0SEQoJcm9vbV9uYW1lGAEgASgJEhIKCnNlc3Npb25faWQYAiABKAkiRwoXUHJvdG9DbGllbnREaXNjb25uZWN0ZWQSEgoKc2Vzc2lvbl9pZBgBIAEoCRIYChBjb250cm9sbGVyX3Nsb3RzGAIgAygFIioKFVByb3RvU2VydmVyUHVzaFN0cmVhbRIRCglyb29tX25hbWUYASABKAlCFloUcmVsYXkvaW50ZXJuYWwvcHJvdG9iBnByb3RvMw");
-
-/**
- * MouseMove message
- *
- * @generated from message proto.ProtoMouseMove
- */
-export type ProtoMouseMove = Message<"proto.ProtoMouseMove"> & {
- /**
- * @generated from field: int32 x = 1;
- */
- x: number;
-
- /**
- * @generated from field: int32 y = 2;
- */
- y: number;
-};
-
-/**
- * Describes the message proto.ProtoMouseMove.
- * Use `create(ProtoMouseMoveSchema)` to create a new message.
- */
-export const ProtoMouseMoveSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 0);
-
-/**
- * MouseMoveAbs message
- *
- * @generated from message proto.ProtoMouseMoveAbs
- */
-export type ProtoMouseMoveAbs = Message<"proto.ProtoMouseMoveAbs"> & {
- /**
- * @generated from field: int32 x = 1;
- */
- x: number;
-
- /**
- * @generated from field: int32 y = 2;
- */
- y: number;
-};
-
-/**
- * Describes the message proto.ProtoMouseMoveAbs.
- * Use `create(ProtoMouseMoveAbsSchema)` to create a new message.
- */
-export const ProtoMouseMoveAbsSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 1);
-
-/**
- * MouseWheel message
- *
- * @generated from message proto.ProtoMouseWheel
- */
-export type ProtoMouseWheel = Message<"proto.ProtoMouseWheel"> & {
- /**
- * @generated from field: int32 x = 1;
- */
- x: number;
-
- /**
- * @generated from field: int32 y = 2;
- */
- y: number;
-};
-
-/**
- * Describes the message proto.ProtoMouseWheel.
- * Use `create(ProtoMouseWheelSchema)` to create a new message.
- */
-export const ProtoMouseWheelSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 2);
-
-/**
- * MouseKeyDown message
- *
- * @generated from message proto.ProtoMouseKeyDown
- */
-export type ProtoMouseKeyDown = Message<"proto.ProtoMouseKeyDown"> & {
- /**
- * @generated from field: int32 key = 1;
- */
- key: number;
-};
-
-/**
- * Describes the message proto.ProtoMouseKeyDown.
- * Use `create(ProtoMouseKeyDownSchema)` to create a new message.
- */
-export const ProtoMouseKeyDownSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 3);
-
-/**
- * MouseKeyUp message
- *
- * @generated from message proto.ProtoMouseKeyUp
- */
-export type ProtoMouseKeyUp = Message<"proto.ProtoMouseKeyUp"> & {
- /**
- * @generated from field: int32 key = 1;
- */
- key: number;
-};
-
-/**
- * Describes the message proto.ProtoMouseKeyUp.
- * Use `create(ProtoMouseKeyUpSchema)` to create a new message.
- */
-export const ProtoMouseKeyUpSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 4);
-
-/**
- * KeyDown message
- *
- * @generated from message proto.ProtoKeyDown
- */
-export type ProtoKeyDown = Message<"proto.ProtoKeyDown"> & {
- /**
- * @generated from field: int32 key = 1;
- */
- key: number;
-};
-
-/**
- * Describes the message proto.ProtoKeyDown.
- * Use `create(ProtoKeyDownSchema)` to create a new message.
- */
-export const ProtoKeyDownSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 5);
-
-/**
- * KeyUp message
- *
- * @generated from message proto.ProtoKeyUp
- */
-export type ProtoKeyUp = Message<"proto.ProtoKeyUp"> & {
- /**
- * @generated from field: int32 key = 1;
- */
- key: number;
-};
-
-/**
- * Describes the message proto.ProtoKeyUp.
- * Use `create(ProtoKeyUpSchema)` to create a new message.
- */
-export const ProtoKeyUpSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 6);
-
-/**
- * ControllerAttach message
- *
- * @generated from message proto.ProtoControllerAttach
- */
-export type ProtoControllerAttach = Message<"proto.ProtoControllerAttach"> & {
- /**
- * One of the following enums: "ps", "xbox" or "switch"
- *
- * @generated from field: string id = 1;
- */
- id: string;
-
- /**
- * Session specific slot number (0-3)
- *
- * @generated from field: int32 session_slot = 2;
- */
- sessionSlot: number;
-
- /**
- * Session ID of the client
- *
- * @generated from field: string session_id = 3;
- */
- sessionId: string;
-};
-
-/**
- * Describes the message proto.ProtoControllerAttach.
- * Use `create(ProtoControllerAttachSchema)` to create a new message.
- */
-export const ProtoControllerAttachSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 7);
-
-/**
- * ControllerDetach message
- *
- * @generated from message proto.ProtoControllerDetach
- */
-export type ProtoControllerDetach = Message<"proto.ProtoControllerDetach"> & {
- /**
- * Session specific slot number (0-3)
- *
- * @generated from field: int32 session_slot = 1;
- */
- sessionSlot: number;
-
- /**
- * Session ID of the client
- *
- * @generated from field: string session_id = 2;
- */
- sessionId: string;
-};
-
-/**
- * Describes the message proto.ProtoControllerDetach.
- * Use `create(ProtoControllerDetachSchema)` to create a new message.
- */
-export const ProtoControllerDetachSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 8);
-
-/**
- * ControllerRumble message
- *
- * @generated from message proto.ProtoControllerRumble
- */
-export type ProtoControllerRumble = Message<"proto.ProtoControllerRumble"> & {
- /**
- * Session specific slot number (0-3)
- *
- * @generated from field: int32 session_slot = 1;
- */
- sessionSlot: number;
-
- /**
- * Session ID of the client
- *
- * @generated from field: string session_id = 2;
- */
- sessionId: string;
-
- /**
- * Low frequency rumble (0-65535)
- *
- * @generated from field: int32 low_frequency = 3;
- */
- lowFrequency: number;
-
- /**
- * High frequency rumble (0-65535)
- *
- * @generated from field: int32 high_frequency = 4;
- */
- highFrequency: number;
-
- /**
- * Duration in milliseconds
- *
- * @generated from field: int32 duration = 5;
- */
- duration: number;
-};
-
-/**
- * Describes the message proto.ProtoControllerRumble.
- * Use `create(ProtoControllerRumbleSchema)` to create a new message.
- */
-export const ProtoControllerRumbleSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 9);
-
-/**
- * ControllerStateBatch - single message containing full or partial controller state
- *
- * @generated from message proto.ProtoControllerStateBatch
- */
-export type ProtoControllerStateBatch = Message<"proto.ProtoControllerStateBatch"> & {
- /**
- * Session specific slot number (0-3)
- *
- * @generated from field: int32 session_slot = 1;
- */
- sessionSlot: number;
-
- /**
- * Session ID of the client
- *
- * @generated from field: string session_id = 2;
- */
- sessionId: string;
-
- /**
- * @generated from field: proto.ProtoControllerStateBatch.UpdateType update_type = 3;
- */
- updateType: ProtoControllerStateBatch_UpdateType;
-
- /**
- * Sequence number for packet loss detection
- *
- * @generated from field: uint32 sequence = 4;
- */
- sequence: number;
-
- /**
- * Button state map (Linux event codes)
- *
- * @generated from field: map button_changed_mask = 5;
- */
- buttonChangedMask: { [key: number]: boolean };
-
- /**
- * Analog inputs
- *
- * -32768 to 32767
- *
- * @generated from field: optional int32 left_stick_x = 6;
- */
- leftStickX?: number;
-
- /**
- * -32768 to 32767
- *
- * @generated from field: optional int32 left_stick_y = 7;
- */
- leftStickY?: number;
-
- /**
- * -32768 to 32767
- *
- * @generated from field: optional int32 right_stick_x = 8;
- */
- rightStickX?: number;
-
- /**
- * -32768 to 32767
- *
- * @generated from field: optional int32 right_stick_y = 9;
- */
- rightStickY?: number;
-
- /**
- * -32768 to 32767
- *
- * @generated from field: optional int32 left_trigger = 10;
- */
- leftTrigger?: number;
-
- /**
- * -32768 to 32767
- *
- * @generated from field: optional int32 right_trigger = 11;
- */
- rightTrigger?: number;
-
- /**
- * -1, 0, or 1
- *
- * @generated from field: optional int32 dpad_x = 12;
- */
- dpadX?: number;
-
- /**
- * -1, 0, or 1
- *
- * @generated from field: optional int32 dpad_y = 13;
- */
- dpadY?: number;
-
- /**
- * Bitmask indicating which fields have changed
- * Bit 0: button_changed_mask, Bit 1: left_stick_x, Bit 2: left_stick_y, etc.
- *
- * @generated from field: optional uint32 changed_fields = 14;
- */
- changedFields?: number;
-};
-
-/**
- * Describes the message proto.ProtoControllerStateBatch.
- * Use `create(ProtoControllerStateBatchSchema)` to create a new message.
- */
-export const ProtoControllerStateBatchSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 10);
-
-/**
- * @generated from enum proto.ProtoControllerStateBatch.UpdateType
- */
-export enum ProtoControllerStateBatch_UpdateType {
- /**
- * Complete controller state
- *
- * @generated from enum value: FULL_STATE = 0;
- */
- FULL_STATE = 0,
-
- /**
- * Only changed fields
- *
- * @generated from enum value: DELTA = 1;
- */
- DELTA = 1,
-}
-
-/**
- * Describes the enum proto.ProtoControllerStateBatch.UpdateType.
- */
-export const ProtoControllerStateBatch_UpdateTypeSchema: GenEnum = /*@__PURE__*/
- enumDesc(file_types, 10, 0);
-
-/**
- * @generated from message proto.RTCIceCandidateInit
- */
-export type RTCIceCandidateInit = Message<"proto.RTCIceCandidateInit"> & {
- /**
- * @generated from field: string candidate = 1;
- */
- candidate: string;
-
- /**
- * @generated from field: optional uint32 sdpMLineIndex = 2;
- */
- sdpMLineIndex?: number;
-
- /**
- * @generated from field: optional string sdpMid = 3;
- */
- sdpMid?: string;
-
- /**
- * @generated from field: optional string usernameFragment = 4;
- */
- usernameFragment?: string;
-};
-
-/**
- * Describes the message proto.RTCIceCandidateInit.
- * Use `create(RTCIceCandidateInitSchema)` to create a new message.
- */
-export const RTCIceCandidateInitSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 11);
-
-/**
- * @generated from message proto.RTCSessionDescriptionInit
- */
-export type RTCSessionDescriptionInit = Message<"proto.RTCSessionDescriptionInit"> & {
- /**
- * @generated from field: string sdp = 1;
- */
- sdp: string;
-
- /**
- * @generated from field: string type = 2;
- */
- type: string;
-};
-
-/**
- * Describes the message proto.RTCSessionDescriptionInit.
- * Use `create(RTCSessionDescriptionInitSchema)` to create a new message.
- */
-export const RTCSessionDescriptionInitSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 12);
-
-/**
- * ProtoICE message
- *
- * @generated from message proto.ProtoICE
- */
-export type ProtoICE = Message<"proto.ProtoICE"> & {
- /**
- * @generated from field: proto.RTCIceCandidateInit candidate = 1;
- */
- candidate?: RTCIceCandidateInit;
-};
-
-/**
- * Describes the message proto.ProtoICE.
- * Use `create(ProtoICESchema)` to create a new message.
- */
-export const ProtoICESchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 13);
-
-/**
- * ProtoSDP message
- *
- * @generated from message proto.ProtoSDP
- */
-export type ProtoSDP = Message<"proto.ProtoSDP"> & {
- /**
- * @generated from field: proto.RTCSessionDescriptionInit sdp = 1;
- */
- sdp?: RTCSessionDescriptionInit;
-};
-
-/**
- * Describes the message proto.ProtoSDP.
- * Use `create(ProtoSDPSchema)` to create a new message.
- */
-export const ProtoSDPSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 14);
-
-/**
- * ProtoRaw message
- *
- * @generated from message proto.ProtoRaw
- */
-export type ProtoRaw = Message<"proto.ProtoRaw"> & {
- /**
- * @generated from field: string data = 1;
- */
- data: string;
-};
-
-/**
- * Describes the message proto.ProtoRaw.
- * Use `create(ProtoRawSchema)` to create a new message.
- */
-export const ProtoRawSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 15);
-
-/**
- * ProtoClientRequestRoomStream message
- *
- * @generated from message proto.ProtoClientRequestRoomStream
- */
-export type ProtoClientRequestRoomStream = Message<"proto.ProtoClientRequestRoomStream"> & {
- /**
- * @generated from field: string room_name = 1;
- */
- roomName: string;
-
- /**
- * @generated from field: string session_id = 2;
- */
- sessionId: string;
-};
-
-/**
- * Describes the message proto.ProtoClientRequestRoomStream.
- * Use `create(ProtoClientRequestRoomStreamSchema)` to create a new message.
- */
-export const ProtoClientRequestRoomStreamSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 16);
-
-/**
- * ProtoClientDisconnected message
- *
- * @generated from message proto.ProtoClientDisconnected
- */
-export type ProtoClientDisconnected = Message<"proto.ProtoClientDisconnected"> & {
- /**
- * @generated from field: string session_id = 1;
- */
- sessionId: string;
-
- /**
- * @generated from field: repeated int32 controller_slots = 2;
- */
- controllerSlots: number[];
-};
-
-/**
- * Describes the message proto.ProtoClientDisconnected.
- * Use `create(ProtoClientDisconnectedSchema)` to create a new message.
- */
-export const ProtoClientDisconnectedSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 17);
-
-/**
- * ProtoServerPushStream message
- *
- * @generated from message proto.ProtoServerPushStream
- */
-export type ProtoServerPushStream = Message<"proto.ProtoServerPushStream"> & {
- /**
- * @generated from field: string room_name = 1;
- */
- roomName: string;
-};
-
-/**
- * Describes the message proto.ProtoServerPushStream.
- * Use `create(ProtoServerPushStreamSchema)` to create a new message.
- */
-export const ProtoServerPushStreamSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_types, 18);
-
diff --git a/packages/input/src/streamwrapper.ts b/packages/input/src/streamwrapper.ts
deleted file mode 100644
index 26fc18fa..00000000
--- a/packages/input/src/streamwrapper.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { pbStream, type ProtobufStream } from "@libp2p/utils";
-import type { Stream } from "@libp2p/interface";
-import { bufbuildAdapter } from "./utils";
-import {
- ProtoMessage,
- ProtoMessageSchema,
- ProtoMessageBase,
-} from "./proto/messages_pb";
-
-type MessageHandler = (
- data: any,
- base: ProtoMessageBase,
-) => void | Promise;
-
-export class P2PMessageStream {
- private pb: ProtobufStream;
- private handlers = new Map();
- private closed = false;
- private readLoopRunning = false;
-
- constructor(stream: Stream) {
- this.pb = pbStream(stream);
- }
-
- public on(payloadType: string, handler: MessageHandler): void {
- if (!this.handlers.has(payloadType)) {
- this.handlers.set(payloadType, []);
- }
- this.handlers.get(payloadType)!.push(handler);
-
- if (!this.readLoopRunning) this.startReading().catch(console.error);
- }
-
- private async startReading(): Promise {
- if (this.readLoopRunning || this.closed) return;
- this.readLoopRunning = true;
-
- while (!this.closed) {
- try {
- const msg: ProtoMessage = await this.pb.read(
- bufbuildAdapter(ProtoMessageSchema),
- );
-
- const payloadType = msg.messageBase?.payloadType;
- if (payloadType && this.handlers.has(payloadType)) {
- const handlers = this.handlers.get(payloadType)!;
- if (msg.payload.value) {
- for (const handler of handlers) {
- try {
- await handler(msg.payload.value, msg.messageBase);
- } catch (err) {
- console.error(`Error in handler for ${payloadType}:`, err);
- }
- }
- }
- }
- } catch (err) {
- if (this.closed) break;
- console.error("Stream read error:", err);
- this.close();
- }
- }
-
- this.readLoopRunning = false;
- }
-
- public async write(
- message: ProtoMessage,
- options?: { signal?: AbortSignal },
- ): Promise {
- if (this.closed)
- throw new Error("Cannot write to closed stream");
-
- await this.pb.write(message, bufbuildAdapter(ProtoMessageSchema), options);
- }
-
- public close(): void {
- this.closed = true;
- this.handlers.clear();
- }
-}
diff --git a/packages/input/src/utils.ts b/packages/input/src/utils.ts
deleted file mode 100644
index 4db1786f..00000000
--- a/packages/input/src/utils.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { create, toBinary, fromBinary } from "@bufbuild/protobuf";
-import type { Message } from "@bufbuild/protobuf";
-import { Uint8ArrayList } from "uint8arraylist";
-import type { GenMessage } from "@bufbuild/protobuf/codegenv2";
-import { timestampFromDate } from "@bufbuild/protobuf/wkt";
-import {
- ProtoLatencyTracker,
- ProtoLatencyTrackerSchema,
- ProtoTimestampEntrySchema,
-} from "./proto/latency_tracker_pb";
-import {
- ProtoMessage,
- ProtoMessageSchema,
- ProtoMessageBaseSchema,
-} from "./proto/messages_pb";
-
-export function bufbuildAdapter(schema: GenMessage) {
- return {
- encode: (data: T): Uint8Array => {
- return toBinary(schema, data);
- },
- decode: (data: Uint8Array | Uint8ArrayList): T => {
- // Convert Uint8ArrayList to Uint8Array if needed
- const bytes = data instanceof Uint8ArrayList ? data.subarray() : data;
- return fromBinary(schema, bytes);
- },
- };
-}
-
-// Latency tracker helpers
-export function createLatencyTracker(sequenceId?: string): ProtoLatencyTracker {
- return create(ProtoLatencyTrackerSchema, {
- sequenceId: sequenceId || crypto.randomUUID(),
- timestamps: [],
- });
-}
-
-export function addLatencyTimestamp(
- tracker: ProtoLatencyTracker,
- stage: string,
-): ProtoLatencyTracker {
- const entry = create(ProtoTimestampEntrySchema, {
- stage,
- time: timestampFromDate(new Date()),
- });
-
- return {
- ...tracker,
- timestamps: [...tracker.timestamps, entry],
- };
-}
-
-interface CreateMessageOptions {
- sequenceId?: string;
-}
-
-function derivePayloadCase(data: Message): string {
- // Extract case from $typeName: "proto.ProtoICE" -> "ice"
- // "proto.ProtoControllerAttach" -> "controllerAttach"
- const typeName = data.$typeName;
- if (!typeName)
- throw new Error("Message has no $typeName");
-
- // Remove "proto.Proto" prefix and convert first char to lowercase
- const caseName = typeName.replace(/^proto\.Proto/, "");
-
- // Convert PascalCase to camelCase
- // If it's all caps (like SDP, ICE), lowercase everything
- // Otherwise, just lowercase the first character
- if (caseName === caseName.toUpperCase()) {
- return caseName.toLowerCase();
- }
- return caseName.charAt(0).toLowerCase() + caseName.slice(1);
-}
-
-export function createMessage(
- data: Message,
- payloadType: string,
- options?: CreateMessageOptions,
-): ProtoMessage {
- const payloadCase = derivePayloadCase(data);
-
- return create(ProtoMessageSchema, {
- messageBase: create(ProtoMessageBaseSchema, {
- payloadType,
- latency: options?.sequenceId
- ? createLatencyTracker(options.sequenceId)
- : undefined,
- }),
- payload: {
- case: payloadCase,
- value: data,
- } as any, // Type assertion needed for dynamic case
- });
-}
diff --git a/packages/input/src/webrtc-stream.ts b/packages/input/src/webrtc-stream.ts
deleted file mode 100644
index 211371f6..00000000
--- a/packages/input/src/webrtc-stream.ts
+++ /dev/null
@@ -1,451 +0,0 @@
-import { webSockets } from "@libp2p/websockets";
-import { webTransport } from "@libp2p/webtransport";
-import { createLibp2p, Libp2p } from "libp2p";
-import { noise } from "@chainsafe/libp2p-noise";
-import { yamux } from "@chainsafe/libp2p-yamux";
-import { identify } from "@libp2p/identify";
-import { multiaddr } from "@multiformats/multiaddr";
-import { Connection } from "@libp2p/interface";
-import { ping } from "@libp2p/ping";
-import { createMessage } from "./utils";
-import { create } from "@bufbuild/protobuf";
-import {
- ProtoClientRequestRoomStream,
- ProtoClientRequestRoomStreamSchema,
- ProtoICE,
- ProtoICESchema,
- ProtoRaw,
- ProtoSDP,
- ProtoSDPSchema,
-} from "./proto/types_pb";
-import { P2PMessageStream } from "./streamwrapper";
-
-const NESTRI_PROTOCOL_STREAM_REQUEST = "/nestri-relay/stream-request/1.0.0";
-
-export class WebRTCStream {
- private _sessionId: string | null = null;
- private _p2p: Libp2p | undefined = undefined;
- private _p2pConn: Connection | undefined = undefined;
- private _msgStream: P2PMessageStream | undefined = undefined;
- private _pc: RTCPeerConnection | undefined = undefined;
- private _audioTrack: MediaStreamTrack | undefined = undefined;
- private _videoTrack: MediaStreamTrack | undefined = undefined;
- private _dataChannel: RTCDataChannel | undefined = undefined;
- private _onConnected: ((stream: MediaStream | null) => void) | undefined =
- undefined;
- private _connectionTimer: NodeJS.Timeout | NodeJS.Timer | undefined =
- undefined;
- private _serverURL: string | undefined = undefined;
- private _roomName: string | undefined = undefined;
- private _isConnected: boolean = false;
- private _dataChannelCallbacks: Array<(data: any) => void> = [];
-
- constructor(
- serverURL: string,
- roomName: string,
- connectedCallback: (stream: MediaStream | null) => void,
- ) {
- if (roomName.length <= 0) {
- console.error("Room name not provided");
- return;
- }
-
- this._onConnected = connectedCallback;
- this._serverURL = serverURL;
- this._roomName = roomName;
- this._setup(serverURL, roomName).catch(console.error);
- }
-
- private async _setup(serverURL: string, roomName: string) {
- // Don't setup new connection if already connected
- if (this._isConnected) {
- console.log("Already connected, skipping setup");
- return;
- }
-
- console.log("Setting up libp2p");
-
- this._p2p = await createLibp2p({
- transports: [webSockets(), webTransport()],
- connectionEncrypters: [noise()],
- streamMuxers: [yamux()],
- connectionGater: {
- denyDialMultiaddr: () => {
- return false;
- },
- },
- services: {
- identify: identify(),
- ping: ping(),
- },
- });
-
- this._p2p.addEventListener("peer:connect", async (e) => {
- console.debug("Peer connected:", e.detail);
- });
- this._p2p.addEventListener("peer:disconnect", (e) => {
- console.debug("Peer disconnected:", e.detail);
- });
-
- const ma = multiaddr(serverURL);
- console.debug("Dialing peer at:", ma.toString());
- this._p2pConn = await this._p2p.dial(ma);
-
- if (this._p2pConn) {
- console.log("Stream is being established");
- let stream = await this._p2pConn
- .newStream(NESTRI_PROTOCOL_STREAM_REQUEST)
- .catch(console.error);
- if (stream) {
- this._msgStream = new P2PMessageStream(stream);
- console.log("Stream opened with peer");
-
- let iceHolder: RTCIceCandidateInit[] = [];
- this._msgStream.on("ice-candidate", (data: ProtoICE) => {
- const cand: RTCIceCandidateInit = {
- candidate: data.candidate.candidate,
- sdpMLineIndex: data.candidate.sdpMLineIndex,
- sdpMid: data.candidate.sdpMid,
- usernameFragment: data.candidate.usernameFragment,
- };
- if (this._pc) {
- if (this._pc.remoteDescription) {
- this._pc.addIceCandidate(cand).catch((err) => {
- console.error("Error adding ICE candidate:", err);
- });
- // Add held candidates
- iceHolder.forEach((candidate) => {
- this._pc!.addIceCandidate(candidate).catch((err) => {
- console.error("Error adding held ICE candidate:", err);
- });
- });
- iceHolder = [];
- } else {
- iceHolder.push(cand);
- }
- }
- });
-
- this._msgStream.on(
- "session-assigned",
- (data: ProtoClientRequestRoomStream) => {
- this._sessionId = data.sessionId;
- localStorage.setItem("nestri-session-id", this._sessionId);
- console.log(
- "Session ID assigned:",
- this._sessionId,
- "for room:",
- data.roomName,
- );
- },
- );
-
- this._msgStream.on("offer", async (data: ProtoSDP) => {
- if (!this._pc) {
- // Setup peer connection now
- this._setupPeerConnection();
- }
- await this._pc!.setRemoteDescription({
- sdp: data.sdp.sdp,
- type: data.sdp.type as RTCSdpType,
- });
- // Add held candidates
- iceHolder.forEach((candidate) => {
- this._pc!.addIceCandidate(candidate).catch((err) => {
- console.error("Error adding held ICE candidate:", err);
- });
- });
- iceHolder = [];
-
- // Create our answer
- const answer = await this._pc!.createAnswer();
- // Force stereo in Chromium browsers
- answer.sdp = this.forceOpusStereo(answer.sdp!);
- await this._pc!.setLocalDescription(answer);
- // Send answer back
- const answerMsg = createMessage(
- create(ProtoSDPSchema, {
- sdp: answer,
- }),
- "answer",
- );
- await this._msgStream?.write(answerMsg);
- });
-
- this._msgStream.on("request-stream-offline", (msg: ProtoRaw) => {
- console.warn("Stream is offline for room:", msg.data);
- this._onConnected?.(null);
- });
-
- const clientId = this.getSessionID();
- if (clientId) {
- console.debug("Using existing session ID:", clientId);
- }
-
- // Send stream request
- const requestMsg = createMessage(
- create(ProtoClientRequestRoomStreamSchema, {
- roomName: roomName,
- sessionId: clientId ?? "",
- }),
- "request-stream-room",
- );
- await this._msgStream.write(requestMsg);
- }
- }
- }
-
- public getSessionID(): string | null {
- if (this._sessionId === null)
- this._sessionId = localStorage.getItem("nestri-session-id");
- return this._sessionId;
- }
-
- // Forces opus to stereo in Chromium browsers, because of course
- private forceOpusStereo(SDP: string): string {
- // Look for "minptime=10;useinbandfec=1" and replace with "minptime=10;useinbandfec=1;stereo=1;sprop-stereo=1;"
- return SDP.replace(
- /(minptime=10;useinbandfec=1)/,
- "$1;stereo=1;sprop-stereo=1;",
- );
- }
-
- private _setupPeerConnection() {
- if (this._pc) {
- this._cleanupPeerConnection();
- }
-
- console.log("Setting up PeerConnection");
- this._pc = new RTCPeerConnection({
- iceServers: [
- {
- urls: "stun:stun.l.google.com:19302",
- },
- ],
- });
-
- this._pc.ontrack = (e) => {
- console.debug("Track received: ", e.track);
- if (e.track.kind === "audio") this._audioTrack = e.track;
- else if (e.track.kind === "video") this._videoTrack = e.track;
-
- this._checkConnectionState();
- };
-
- this._pc.onconnectionstatechange = () => {
- console.debug("Connection state changed to: ", this._pc!.connectionState);
- this._checkConnectionState();
- };
-
- this._pc.oniceconnectionstatechange = () => {
- console.debug(
- "ICE connection state changed to: ",
- this._pc!.iceConnectionState,
- );
- this._checkConnectionState();
- };
-
- this._pc.onicegatheringstatechange = () => {
- console.debug(
- "ICE gathering state changed to: ",
- this._pc!.iceGatheringState,
- );
- this._checkConnectionState();
- };
-
- this._pc.onicecandidate = (e) => {
- if (e.candidate) {
- const iceMsg = createMessage(
- create(ProtoICESchema, {
- candidate: e.candidate,
- }),
- "ice-candidate",
- );
- if (this._msgStream) {
- this._msgStream
- .write(iceMsg)
- .catch((err) => console.error("Error sending ICE candidate:", err));
- } else {
- console.warn("P2P stream not established, cannot send ICE candidate");
- }
- }
- };
-
- this._pc.ondatachannel = (e) => {
- this._dataChannel = e.channel;
- this._setupDataChannelEvents();
- };
- }
-
- private _checkConnectionState() {
- if (!this._pc || !this._p2p || !this._p2pConn) return;
-
- console.debug("Checking connection state:", {
- connectionState: this._pc.connectionState,
- iceConnectionState: this._pc.iceConnectionState,
- hasAudioTrack: !!this._audioTrack,
- hasVideoTrack: !!this._videoTrack,
- isConnected: this._isConnected,
- });
-
- if (
- this._pc.connectionState === "connected" &&
- this._audioTrack !== undefined &&
- this._videoTrack !== undefined
- ) {
- this._clearConnectionTimer();
- if (!this._isConnected) {
- // Only trigger callback if not already connected
- this._isConnected = true;
- if (this._onConnected !== undefined) {
- this._onConnected(
- new MediaStream([this._audioTrack, this._videoTrack]),
- );
- }
- }
- } else if (
- this._pc.connectionState === "failed" ||
- this._pc.connectionState === "closed" ||
- this._pc.iceConnectionState === "failed"
- ) {
- console.log("PeerConnection failed or closed");
- //this._isConnected = false; // Reset connected state
- //this._handleConnectionFailure();
- }
- }
-
- private _handleConnectionFailure() {
- this._clearConnectionTimer();
- if (this._isConnected) {
- // Only notify if previously connected
- this._isConnected = false;
- if (this._onConnected) {
- this._onConnected(null);
- }
- }
- this._cleanupPeerConnection();
-
- // Attempt to reconnect only if not already connected
- if (!this._isConnected && this._serverURL && this._roomName) {
- this._setup(this._serverURL, this._roomName).catch((err) =>
- console.error("Reconnection failed:", err),
- );
- }
- }
-
- private _cleanupPeerConnection() {
- if (this._pc) {
- try {
- this._pc.close();
- } catch (err) {
- console.error("Error closing peer connection:", err);
- }
- this._pc = undefined;
- }
-
- if (this._audioTrack || this._videoTrack) {
- try {
- if (this._audioTrack) this._audioTrack.stop();
- if (this._videoTrack) this._videoTrack.stop();
- } catch (err) {
- console.error("Error stopping media tracks:", err);
- }
- this._audioTrack = undefined;
- this._videoTrack = undefined;
- }
-
- if (this._dataChannel) {
- try {
- this._dataChannel.close();
- } catch (err) {
- console.error("Error closing data channel:", err);
- }
- this._dataChannel = undefined;
- this._dataChannelCallbacks = [];
- }
- this._isConnected = false; // Reset connected state during cleanup
- }
-
- private _clearConnectionTimer() {
- if (this._connectionTimer) {
- clearTimeout(this._connectionTimer as any);
- this._connectionTimer = undefined;
- }
- }
-
- public addDataChannelCallback(callback: (data: any) => void) {
- this._dataChannelCallbacks.push(callback);
- }
-
- public removeDataChannelCallback(callback: (data: any) => void) {
- this._dataChannelCallbacks = this._dataChannelCallbacks.filter(
- (cb) => cb !== callback,
- );
- }
-
- private _setupDataChannelEvents() {
- if (!this._dataChannel) return;
-
- this._dataChannel.onclose = () => console.log("sendChannel has closed");
- this._dataChannel.onopen = () => console.log("sendChannel has opened");
- this._dataChannel.onmessage = (event) => {
- // Parse as ProtoBuf message
- const data = event.data;
- // Call registered callback if exists
- this._dataChannelCallbacks.forEach((callback) => {
- try {
- callback(data);
- } catch (err) {
- console.error("Error in data channel callback:", err);
- }
- });
- };
- }
-
- private async _gatherStats(): Promise {
- if (
- this._pc === undefined ||
- this._videoTrack === undefined ||
- !this._isConnected
- )
- return null;
-
- return new Promise((resolve) => {
- // Keep trying to get stats until gotten
- const interval = setInterval(async () => {
- if (this._pc === undefined) {
- clearInterval(interval);
- return;
- }
-
- const stats = await this._pc!.getStats(this._videoTrack);
- stats.forEach((report) => {
- if (report.type === "inbound-rtp") {
- clearInterval(interval);
-
- resolve({ pli: report.pliCount, nack: report.nackCount });
- }
- });
- }, 250);
- });
- }
-
- // Send binary message through the data channel
- public sendBinary(data: Uint8Array) {
- if (this._dataChannel && this._dataChannel.readyState === "open")
- this._dataChannel.send(data);
- else console.log("Data channel not open or not established.");
- }
-
- public disconnect() {
- this._clearConnectionTimer();
- this._cleanupPeerConnection();
- if (this._p2pConn) {
- this._p2pConn
- .close()
- .catch((err) => console.error("Error closing P2P connection:", err));
- this._p2pConn = undefined;
- }
- this._isConnected = false;
- }
-}
diff --git a/packages/input/sst-env.d.ts b/packages/input/sst-env.d.ts
deleted file mode 100644
index b6a7e906..00000000
--- a/packages/input/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/moq/.eslintrc.cjs b/packages/moq/.eslintrc.cjs
deleted file mode 100644
index 49848456..00000000
--- a/packages/moq/.eslintrc.cjs
+++ /dev/null
@@ -1,56 +0,0 @@
-/* eslint-env node */
-module.exports = {
- extends: [
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended",
- "plugin:@typescript-eslint/recommended-requiring-type-checking",
- "plugin:@typescript-eslint/strict",
- "prettier",
- ],
- parser: "@typescript-eslint/parser",
- plugins: ["@typescript-eslint", "prettier", "solid"],
- root: true,
- env: {
- browser: true,
- es2022: true,
- worker: true,
- },
- ignorePatterns: ["dist", "node_modules", ".eslintrc.cjs"],
- rules: {
- // Allow the ! operator because typescript can't always figure out when something is not undefined
- "@typescript-eslint/no-non-null-assertion": "off",
-
- // Allow `any` because Javascript was not designed to be type safe.
- "@typescript-eslint/no-explicit-any": "off",
-
- // Requring a comment in empty function is silly
- "@typescript-eslint/no-empty-function": "off",
-
- // Warn when an unused variable doesn't start with an underscore
- "@typescript-eslint/no-unused-vars": [
- "warn",
- {
- argsIgnorePattern: "^_",
- varsIgnorePattern: "^_",
- caughtErrorsIgnorePattern: "^_",
- },
- ],
-
- // The no-unsafe-* rules are a pain an introduce a lot of false-positives.
- // Typescript will make sure things are properly typed.
- "@typescript-eslint/no-unsafe-call": "off",
- "@typescript-eslint/no-unsafe-argument": "off",
- "@typescript-eslint/no-unsafe-call": "off",
- "@typescript-eslint/no-unsafe-member-access": "off",
- "@typescript-eslint/no-unsafe-assignment": "off",
- "@typescript-eslint/no-unsafe-return": "off",
-
- // Make formatting errors into warnings
- "prettier/prettier": 1,
- },
-
- parserOptions: {
- project: true,
- tsconfigRootDir: __dirname,
- },
-}
diff --git a/packages/moq/.prettierrc.yaml b/packages/moq/.prettierrc.yaml
deleted file mode 100644
index 708c01ae..00000000
--- a/packages/moq/.prettierrc.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-# note: root .editorconfig is used
-
-# Don't insert semi-colons unless needed
-semi: false
diff --git a/packages/moq/README.md b/packages/moq/README.md
deleted file mode 100644
index 4aa2e40e..00000000
--- a/packages/moq/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Media over QUIC
-
-Media over QUIC (MoQ) is a live media delivery protocol utilizing QUIC streams.
-See the [Warp draft](https://datatracker.ietf.org/doc/draft-lcurley-warp/).
-
-This is a Typescript library that supports both contribution (ingest) and distribution (playback).
-It requires a server, such as [moq-rs](https://github.com/kixelated/moq-rs).
-
-## Usage
-
-```
-npm install @kixelated/moq
-```
-
-## License
-
-Licensed under either:
-
-- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
-- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
diff --git a/packages/moq/common/async.ts b/packages/moq/common/async.ts
deleted file mode 100644
index 2f91bbbf..00000000
--- a/packages/moq/common/async.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-export class Deferred {
- promise: Promise
- resolve!: (value: T | PromiseLike) => void
- reject!: (reason: unknown) => void
- pending = true
-
- constructor() {
- this.promise = new Promise((resolve, reject) => {
- this.resolve = (value) => {
- this.pending = false
- resolve(value)
- }
- this.reject = (reason) => {
- this.pending = false
- reject(reason)
- }
- })
- }
-}
-
-export type WatchNext = [T, Promise> | undefined]
-
-export class Watch {
- #current: WatchNext
- #next = new Deferred>()
-
- constructor(init: T) {
- this.#next = new Deferred>()
- this.#current = [init, this.#next.promise]
- }
-
- value(): WatchNext {
- return this.#current
- }
-
- update(v: T | ((v: T) => T)) {
- if (!this.#next.pending) {
- throw new Error("closed")
- }
-
- // If we're given a function, call it with the current value
- let value: T
- if (v instanceof Function) {
- value = v(this.#current[0])
- } else {
- value = v
- }
-
- const next = new Deferred>()
- this.#current = [value, next.promise]
- this.#next.resolve(this.#current)
- this.#next = next
- }
-
- close() {
- this.#current[1] = undefined
- this.#next.resolve(this.#current)
- }
-
- closed() {
- return !this.#next.pending
- }
-}
-
-// Wakes up a multiple consumers.
-export class Notify {
- #next = new Deferred()
-
- async wait() {
- return this.#next.promise
- }
-
- wake() {
- if (!this.#next.pending) {
- throw new Error("closed")
- }
-
- this.#next.resolve()
- this.#next = new Deferred()
- }
-
- close() {
- this.#next.resolve()
- }
-}
-
-// Allows queuing N values, like a Channel.
-export class Queue {
- #stream: TransformStream
- #closed = false
-
- constructor(capacity = 1) {
- const queue = new CountQueuingStrategy({ highWaterMark: capacity })
- this.#stream = new TransformStream({}, undefined, queue)
- }
-
- async push(v: T) {
- if (this.#closed) throw new Error("closed")
- const w = this.#stream.writable.getWriter()
- await w.write(v)
- w.releaseLock()
- }
-
- async next(): Promise {
- const r = this.#stream.readable.getReader()
- const { value, done } = await r.read()
- r.releaseLock()
-
- if (done) return
- return value
- }
-
- async abort(err: Error) {
- if (this.#closed) return
- await this.#stream.writable.abort(err)
- this.#closed = true
- }
-
- async close() {
- if (this.#closed) return
- await this.#stream.writable.close()
- this.#closed = true
- }
-
- closed() {
- return this.#closed
- }
-}
diff --git a/packages/moq/common/download.ts b/packages/moq/common/download.ts
deleted file mode 100644
index 4a2a69b5..00000000
--- a/packages/moq/common/download.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-// Utility function to download a Uint8Array for debugging.
-export function download(data: Uint8Array, name: string) {
- const blob = new Blob([data], {
- type: "application/octet-stream",
- })
-
- const url = window.URL.createObjectURL(blob)
-
- const a = document.createElement("a")
- a.href = url
- a.download = name
- document.body.appendChild(a)
- a.style.display = "none"
- a.click()
- a.remove()
-
- setTimeout(() => window.URL.revokeObjectURL(url), 1000)
-}
diff --git a/packages/moq/common/error.ts b/packages/moq/common/error.ts
deleted file mode 100644
index d4171799..00000000
--- a/packages/moq/common/error.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// I hate javascript
-export function asError(e: unknown): Error {
- if (e instanceof Error) {
- return e
- }
- if (typeof e === "string") {
- return new Error(e)
- }
- return new Error(String(e))
-}
-
-export function isError(e: unknown): e is Error {
- return e instanceof Error
-}
diff --git a/packages/moq/common/hex.ts b/packages/moq/common/hex.ts
deleted file mode 100644
index ca833dbc..00000000
--- a/packages/moq/common/hex.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export function decode(str: string): Uint8Array {
- const bytes = new Uint8Array(str.length / 2)
- for (let i = 0; i < bytes.length; i += 1) {
- bytes[i] = Number.parseInt(str.slice(2 * i, 2 * i + 2), 16)
- }
- return bytes
-}
-
-export function encode(_bytes: Uint8Array): string {
- throw "todo"
-}
diff --git a/packages/moq/common/index.ts b/packages/moq/common/index.ts
deleted file mode 100644
index 6d519d33..00000000
--- a/packages/moq/common/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { asError } from "./error"
diff --git a/packages/moq/common/ring.ts b/packages/moq/common/ring.ts
deleted file mode 100644
index 8a805059..00000000
--- a/packages/moq/common/ring.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-// Ring buffer with audio samples.
-
-enum STATE {
- READ_POS = 0, // The current read position
- WRITE_POS = 1, // The current write position
- LENGTH = 2, // Clever way of saving the total number of enums values.
-}
-
-interface FrameCopyToOptions {
- frameCount?: number
- frameOffset?: number
- planeIndex: number
-}
-
-// This is implemented by AudioData in WebCodecs, but we don't import it because it's a DOM type.
-interface Frame {
- numberOfFrames: number
- numberOfChannels: number
- copyTo(dst: Float32Array, options: FrameCopyToOptions): void
-}
-
-// No prototype to make this easier to send via postMessage
-export class RingShared {
- state: SharedArrayBuffer
-
- channels: SharedArrayBuffer[]
- capacity: number
-
- constructor(channels: number, capacity: number) {
- // Store the current state in a separate ring buffer.
- this.state = new SharedArrayBuffer(STATE.LENGTH * Int32Array.BYTES_PER_ELEMENT)
-
- // Create a buffer for each audio channel
- this.channels = []
- for (let i = 0; i < channels; i += 1) {
- const buffer = new SharedArrayBuffer(capacity * Float32Array.BYTES_PER_ELEMENT)
- this.channels.push(buffer)
- }
-
- this.capacity = capacity
- }
-}
-
-export class Ring {
- state: Int32Array
- channels: Float32Array[]
- capacity: number
-
- constructor(shared: RingShared) {
- this.state = new Int32Array(shared.state)
-
- this.channels = []
- for (const channel of shared.channels) {
- this.channels.push(new Float32Array(channel))
- }
-
- this.capacity = shared.capacity
- }
-
- // Write samples for single audio frame, returning the total number written.
- write(frame: Frame): number {
- const readPos = Atomics.load(this.state, STATE.READ_POS)
- const writePos = Atomics.load(this.state, STATE.WRITE_POS)
-
- const available = this.capacity - (writePos - readPos)
- if (available <= 0) return 0
-
- const toWrite = Math.min(frame.numberOfFrames, available)
- const startPos = writePos
- const endPos = writePos + toWrite
-
- const startIndex = startPos % this.capacity
- const endIndex = endPos % this.capacity
-
- // Loop over each channel
- for (let i = 0; i < this.channels.length; i += 1) {
- const channel = this.channels[i]
-
- // If the AudioData doesn't have enough channels, duplicate it.
- const planeIndex = Math.min(i, frame.numberOfChannels - 1)
-
- if (startIndex < endIndex) {
- // One continuous range to copy.
- const full = channel.subarray(startIndex, endIndex)
-
- frame.copyTo(full, {
- planeIndex,
- frameCount: endIndex - startIndex,
- })
- } else {
- const first = channel.subarray(startIndex)
- const second = channel.subarray(0, endIndex)
-
- frame.copyTo(first, {
- planeIndex,
- frameCount: first.length,
- })
-
- // We need this conditional when startIndex == 0 and endIndex == 0
- // When capacity=4410 and frameCount=1024, this was happening 52s into the audio.
- if (second.length) {
- frame.copyTo(second, {
- planeIndex,
- frameOffset: first.length,
- frameCount: second.length,
- })
- }
- }
- }
-
- Atomics.store(this.state, STATE.WRITE_POS, endPos)
-
- return toWrite
- }
-
- read(dst: Float32Array[]): number {
- const readPos = Atomics.load(this.state, STATE.READ_POS)
- const writePos = Atomics.load(this.state, STATE.WRITE_POS)
-
- const startPos = readPos
- let endPos = startPos + dst[0].length
-
- if (endPos > writePos) {
- endPos = writePos
- if (endPos <= startPos) {
- // Nothing to read
- return 0
- }
- }
-
- const startIndex = startPos % this.capacity
- const endIndex = endPos % this.capacity
-
- // Loop over each channel
- for (let i = 0; i < dst.length; i += 1) {
- if (i >= this.channels.length) {
- // ignore excess channels
- }
-
- const input = this.channels[i]
- const output = dst[i]
-
- if (startIndex < endIndex) {
- const full = input.subarray(startIndex, endIndex)
- output.set(full)
- } else {
- const first = input.subarray(startIndex)
- const second = input.subarray(0, endIndex)
-
- output.set(first)
- output.set(second, first.length)
- }
- }
-
- Atomics.store(this.state, STATE.READ_POS, endPos)
-
- return endPos - startPos
- }
-
- clear() {
- const pos = Atomics.load(this.state, STATE.WRITE_POS)
- Atomics.store(this.state, STATE.READ_POS, pos)
- }
-
- size() {
- // TODO is this thread safe?
- const readPos = Atomics.load(this.state, STATE.READ_POS)
- const writePos = Atomics.load(this.state, STATE.WRITE_POS)
-
- return writePos - readPos
- }
-}
diff --git a/packages/moq/common/settings.ts b/packages/moq/common/settings.ts
deleted file mode 100644
index 807fc393..00000000
--- a/packages/moq/common/settings.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-// MediaTrackSettings can represent both audio and video, which means a LOT of possibly undefined properties.
-// This is a fork of the MediaTrackSettings interface with properties required for audio or vidfeo.
-export interface AudioTrackSettings {
- deviceId: string
- groupId: string
-
- autoGainControl: boolean
- channelCount: number
- echoCancellation: boolean
- noiseSuppression: boolean
- sampleRate: number
- sampleSize: number
-}
-
-export interface VideoTrackSettings {
- deviceId: string
- groupId: string
-
- aspectRatio: number
- facingMode: "user" | "environment" | "left" | "right"
- frameRate: number
- height: number
- resizeMode: "none" | "crop-and-scale"
- width: number
-}
-
-export function isAudioTrackSettings(settings: MediaTrackSettings): settings is AudioTrackSettings {
- return "sampleRate" in settings
-}
-
-export function isVideoTrackSettings(settings: MediaTrackSettings): settings is VideoTrackSettings {
- return "width" in settings
-}
diff --git a/packages/moq/common/tsconfig.json b/packages/moq/common/tsconfig.json
deleted file mode 100644
index 784e2190..00000000
--- a/packages/moq/common/tsconfig.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "include": ["."]
-}
diff --git a/packages/moq/contribute/audio.ts b/packages/moq/contribute/audio.ts
deleted file mode 100644
index e170b59f..00000000
--- a/packages/moq/contribute/audio.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-import { Deferred } from "../common/async"
-import type { Frame } from "../karp/frame"
-import type { Group, Track } from "../transfork"
-import { Closed } from "../transfork/error"
-
-const SUPPORTED = [
- // TODO support AAC
- // "mp4a"
- "Opus",
-]
-
-export class Packer {
- #source: MediaStreamTrackProcessor
- #encoder: Encoder
-
- #data: Track
- #current?: Group
-
- constructor(track: MediaStreamAudioTrack, encoder: Encoder, data: Track) {
- this.#source = new MediaStreamTrackProcessor({ track })
- this.#encoder = encoder
- this.#data = data
- }
-
- async run() {
- const output = new WritableStream({
- write: (chunk) => this.#write(chunk),
- close: () => this.#close(),
- abort: (e) => this.#close(e),
- })
-
- return this.#source.readable.pipeThrough(this.#encoder.frames).pipeTo(output)
- }
-
- #write(frame: Frame) {
- // TODO use a fixed interval instead of keyframes (audio)
- // TODO actually just align with video
- if (!this.#current || frame.type === "key") {
- if (this.#current) {
- this.#current.close()
- }
-
- this.#current = this.#data.appendGroup()
- }
-
- this.#current.writeFrame(frame.data)
- }
-
- #close(err?: unknown) {
- const closed = Closed.from(err)
- if (this.#current) {
- this.#current.close(closed)
- }
-
- this.#data.close(closed)
- }
-}
-
-export class Encoder {
- #encoder!: AudioEncoder
- #encoderConfig: AudioEncoderConfig
- #decoderConfig = new Deferred()
-
- frames: TransformStream
-
- constructor(config: AudioEncoderConfig) {
- this.#encoderConfig = config
-
- this.frames = new TransformStream({
- start: this.#start.bind(this),
- transform: this.#transform.bind(this),
- flush: this.#flush.bind(this),
- })
- }
-
- #start(controller: TransformStreamDefaultController) {
- this.#encoder = new AudioEncoder({
- output: (frame, metadata) => {
- this.#enqueue(controller, frame, metadata)
- },
- error: (err) => {
- throw err
- },
- })
-
- this.#encoder.configure(this.#encoderConfig)
- }
-
- #transform(frame: AudioData) {
- this.#encoder.encode(frame)
- frame.close()
- }
-
- #enqueue(
- controller: TransformStreamDefaultController,
- frame: EncodedAudioChunk,
- metadata?: EncodedAudioChunkMetadata,
- ) {
- const config = metadata?.decoderConfig
- if (config && !this.#decoderConfig.pending) {
- const config = metadata.decoderConfig
- if (!config) throw new Error("missing decoder config")
-
- this.#decoderConfig.resolve(config)
- }
-
- controller.enqueue(frame)
- }
-
- #flush() {
- this.#encoder.close()
- }
-
- static async isSupported(config: AudioEncoderConfig) {
- // Check if we support a specific codec family
- const short = config.codec.substring(0, 4)
- if (!SUPPORTED.includes(short)) return false
-
- const res = await AudioEncoder.isConfigSupported(config)
- return !!res.supported
- }
-
- get config() {
- return this.#encoderConfig
- }
-
- async decoderConfig(): Promise {
- return await this.#decoderConfig.promise
- }
-}
diff --git a/packages/moq/contribute/broadcast.ts b/packages/moq/contribute/broadcast.ts
deleted file mode 100644
index f0b61e46..00000000
--- a/packages/moq/contribute/broadcast.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-import * as Catalog from "../karp/catalog"
-import * as Transfork from "../transfork"
-import * as Audio from "./audio"
-import * as Video from "./video"
-
-import { isAudioTrackSettings, isVideoTrackSettings } from "../common/settings"
-
-export interface BroadcastConfig {
- path: string[]
- media: MediaStream
- id?: number
-
- audio?: AudioEncoderConfig
- video?: VideoEncoderConfig
-}
-
-export interface BroadcastConfigTrack {
- codec: string
- bitrate: number
-}
-
-export class Broadcast {
- #config: BroadcastConfig
- #path: string[]
-
- constructor(config: BroadcastConfig) {
- const id = config.id || new Date().getTime() / 1000
-
- this.#config = config
- this.#path = config.path.concat(id.toString())
- }
-
- async publish(connection: Transfork.Connection) {
- const broadcast: Catalog.Broadcast = {
- path: this.#config.path,
- audio: [],
- video: [],
- }
-
- for (const media of this.#config.media.getTracks()) {
- const settings = media.getSettings()
-
- const info = {
- name: media.id, // TODO way too verbose
- priority: media.kind === "video" ? 1 : 2,
- }
-
- const track = new Transfork.Track(this.#config.path.concat(info.name), info.priority)
-
- if (isVideoTrackSettings(settings)) {
- if (!this.#config.video) {
- throw new Error("no video configuration provided")
- }
-
- const encoder = new Video.Encoder(this.#config.video)
- const packer = new Video.Packer(media as MediaStreamVideoTrack, encoder, track)
-
- // TODO handle error
- packer.run().catch((err) => console.error("failed to run video packer: ", err))
-
- const decoder = await encoder.decoderConfig()
- const description = decoder.description ? new Uint8Array(decoder.description as ArrayBuffer) : undefined
-
- const video: Catalog.Video = {
- track: info,
- codec: decoder.codec,
- description: description,
- resolution: { width: settings.width, height: settings.height },
- frame_rate: settings.frameRate,
- bitrate: this.#config.video.bitrate,
- }
-
- broadcast.video.push(video)
- } else if (isAudioTrackSettings(settings)) {
- if (!this.#config.audio) {
- throw new Error("no audio configuration provided")
- }
-
- const encoder = new Audio.Encoder(this.#config.audio)
- const packer = new Audio.Packer(media as MediaStreamAudioTrack, encoder, track)
- packer.run().catch((err) => console.error("failed to run audio packer: ", err)) // TODO handle error
-
- const decoder = await encoder.decoderConfig()
-
- const audio: Catalog.Audio = {
- track: info,
- codec: decoder.codec,
- sample_rate: settings.sampleRate,
- channel_count: settings.channelCount,
- bitrate: this.#config.audio.bitrate,
- }
-
- broadcast.audio.push(audio)
- } else {
- throw new Error(`unknown track type: ${media.kind}`)
- }
-
- connection.publish(track.reader())
- }
-
- const track = new Transfork.Track(this.#config.path.concat("catalog.json"), 0)
- track.appendGroup().writeFrames(Catalog.encode(broadcast))
-
- connection.publish(track.reader())
- }
-
- close() {}
-}
diff --git a/packages/moq/contribute/index.ts b/packages/moq/contribute/index.ts
deleted file mode 100644
index 704f6769..00000000
--- a/packages/moq/contribute/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export { Broadcast } from "./broadcast"
-export type { BroadcastConfig, BroadcastConfigTrack } from "./broadcast"
-
-export { Encoder as VideoEncoder } from "./video"
-export { Encoder as AudioEncoder } from "./audio"
diff --git a/packages/moq/contribute/segment.ts b/packages/moq/contribute/segment.ts
deleted file mode 100644
index fa5a65e6..00000000
--- a/packages/moq/contribute/segment.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import type { Frame } from "../karp/frame"
-
-export class Segment {
- id: number
-
- // Take in a stream of frames
- input: WritableStream
-
- // Output a stream of bytes, which we fork for each new subscriber.
- #cache: ReadableStream
-
- timestamp = 0
-
- constructor(id: number) {
- this.id = id
-
- // Set a max size for each segment, dropping the tail if it gets too long.
- // We tee the reader, so this limit applies to the FASTEST reader.
- const backpressure = new ByteLengthQueuingStrategy({
- highWaterMark: 8_000_000,
- })
-
- const transport = new TransformStream (
- {
- transform: (frame: Frame, controller) => {
- // Compute the max timestamp of the segment
- this.timestamp = Math.max(this.timestamp, frame.timestamp)
-
- // Push the chunk to any listeners.
- controller.enqueue(frame.data)
- },
- },
- undefined,
- backpressure,
- )
-
- this.input = transport.writable
- this.#cache = transport.readable
- }
-
- // Split the output reader into two parts.
- chunks(): ReadableStream {
- const [tee, cache] = this.#cache.tee()
- this.#cache = cache
- return tee
- }
-}
diff --git a/packages/moq/contribute/track.ts b/packages/moq/contribute/track.ts
deleted file mode 100644
index d2a050ee..00000000
--- a/packages/moq/contribute/track.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-import { Notify } from "../common/async"
-import type { BroadcastConfig } from "./broadcast"
-import { Segment } from "./segment"
-
-import type { Frame } from "../karp/frame"
-import * as Audio from "./audio"
-import * as Video from "./video"
-
-export class Track {
- name: string
-
- #init?: Uint8Array
- #segments: Segment[] = []
-
- #offset = 0 // number of segments removed from the front of the queue
- #closed = false
- #error?: Error
- #notify = new Notify()
-
- constructor(media: MediaStreamTrack, config: BroadcastConfig) {
- this.name = media.kind
-
- // We need to split based on type because Typescript is hard
- if (isAudioTrack(media)) {
- if (!config.audio) throw new Error("no audio config")
- this.#runAudio(media, config.audio).catch((err) => this.#close(err))
- } else if (isVideoTrack(media)) {
- if (!config.video) throw new Error("no video config")
- this.#runVideo(media, config.video).catch((err) => this.#close(err))
- } else {
- throw new Error(`unknown track type: ${media.kind}`)
- }
- }
-
- async #runAudio(track: MediaStreamAudioTrack, config: AudioEncoderConfig) {
- const source = new MediaStreamTrackProcessor({ track })
- const encoder = new Audio.Encoder(config)
-
- // Split the container at keyframe boundaries
- const segments = new WritableStream({
- write: (chunk) => this.#write(chunk),
- close: () => this.#close(),
- abort: (e) => this.#close(e),
- })
-
- return source.readable.pipeThrough(encoder.frames).pipeTo(segments)
- }
-
- async #runVideo(track: MediaStreamVideoTrack, config: VideoEncoderConfig) {
- const source = new MediaStreamTrackProcessor({ track })
- const encoder = new Video.Encoder(config)
-
- // Split the container at keyframe boundaries
- const segments = new WritableStream({
- write: (chunk) => this.#write(chunk),
- close: () => this.#close(),
- abort: (e) => this.#close(e),
- })
-
- return source.readable.pipeThrough(encoder.frames).pipeTo(segments)
- }
-
- async #write(frame: Frame) {
- let current = this.#segments.at(-1)
- if (!current || frame.type === "key") {
- if (current) {
- await current.input.close()
- }
-
- const segment = new Segment(this.#offset + this.#segments.length)
- this.#segments.push(segment)
-
- this.#notify.wake()
-
- current = segment
-
- // Clear old segments
- while (this.#segments.length > 1) {
- const first = this.#segments[0]
-
- // Expire after 10s
- if (frame.timestamp - first.timestamp < 10_000_000) break
- this.#segments.shift()
- this.#offset += 1
-
- await first.input.abort("expired")
- }
- }
-
- const writer = current.input.getWriter()
-
- if ((writer.desiredSize || 0) > 0) {
- await writer.write(frame)
- } else {
- console.warn("dropping chunk", writer.desiredSize)
- }
-
- writer.releaseLock()
- }
-
- async #close(e?: Error) {
- this.#error = e
-
- const current = this.#segments.at(-1)
- if (current) {
- await current.input.close()
- }
-
- this.#closed = true
- this.#notify.wake()
- }
-
- async init(): Promise {
- while (!this.#init) {
- if (this.#closed) throw new Error("track closed")
- await this.#notify.wait()
- }
-
- return this.#init
- }
-
- // TODO generize this
- segments(): ReadableStream {
- let pos = this.#offset
-
- return new ReadableStream({
- pull: async (controller) => {
- for (;;) {
- let index = pos - this.#offset
- if (index < 0) index = 0
-
- if (index < this.#segments.length) {
- controller.enqueue(this.#segments[index])
- pos += 1
- return // Called again when more data is requested
- }
-
- if (this.#error) {
- controller.error(this.#error)
- return
- }
- if (this.#closed) {
- controller.close()
- return
- }
-
- // Pull again on wakeup
- // NOTE: We can't return until we enqueue at least one segment.
- await this.#notify.wait()
- }
- },
- })
- }
-}
-
-function isAudioTrack(track: MediaStreamTrack): track is MediaStreamAudioTrack {
- return track.kind === "audio"
-}
-
-function isVideoTrack(track: MediaStreamTrack): track is MediaStreamVideoTrack {
- return track.kind === "video"
-}
diff --git a/packages/moq/contribute/tsconfig.json b/packages/moq/contribute/tsconfig.json
deleted file mode 100644
index 693a7071..00000000
--- a/packages/moq/contribute/tsconfig.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "include": ["."],
- "compilerOptions": {
- "types": ["dom-mediacapture-transform", "dom-webcodecs"]
- },
- "references": [
- {
- "path": "../common"
- },
- {
- "path": "../transfork"
- },
- {
- "path": "../karp"
- }
- ]
-}
diff --git a/packages/moq/contribute/video.ts b/packages/moq/contribute/video.ts
deleted file mode 100644
index fa25876c..00000000
--- a/packages/moq/contribute/video.ts
+++ /dev/null
@@ -1,165 +0,0 @@
-import { Deferred } from "../common/async"
-import type { Frame } from "../karp/frame"
-import type { Group, Track } from "../transfork"
-import { Closed } from "../transfork/error"
-
-const SUPPORTED = [
- "avc1", // H.264
- "hev1", // HEVC (aka h.265)
- // "av01", // TDOO support AV1
-]
-
-export interface EncoderSupported {
- codecs: string[]
-}
-
-export class Packer {
- #source: MediaStreamTrackProcessor
- #encoder: Encoder
-
- #data: Track
- #current?: Group
-
- constructor(track: MediaStreamVideoTrack, encoder: Encoder, data: Track) {
- this.#source = new MediaStreamTrackProcessor({ track })
- this.#encoder = encoder
- this.#data = data
- }
-
- async run() {
- const output = new WritableStream({
- write: (chunk) => this.#write(chunk),
- close: () => this.#close(),
- abort: (e) => this.#close(e),
- })
-
- return this.#source.readable.pipeThrough(this.#encoder.frames).pipeTo(output)
- }
-
- #write(frame: Frame) {
- if (!this.#current || frame.type === "key") {
- if (this.#current) {
- this.#current.close()
- }
-
- this.#current = this.#data.appendGroup()
- }
-
- frame.encode(this.#current)
- }
-
- #close(err?: unknown) {
- const closed = Closed.from(err)
- if (this.#current) {
- this.#current.close(closed)
- }
-
- this.#data.close(closed)
- }
-}
-
-export class Encoder {
- #encoder!: VideoEncoder
- #encoderConfig: VideoEncoderConfig
- #decoderConfig = new Deferred()
-
- // true if we should insert a keyframe, undefined when the encoder should decide
- #keyframeNext: true | undefined = true
-
- // Count the number of frames without a keyframe.
- #keyframeCounter = 0
-
- // Converts raw rames to encoded frames.
- frames: TransformStream
-
- constructor(config: VideoEncoderConfig) {
- config.bitrateMode ??= "constant"
- config.latencyMode ??= "realtime"
-
- this.#encoderConfig = config
-
- this.frames = new TransformStream({
- start: this.#start.bind(this),
- transform: this.#transform.bind(this),
- flush: this.#flush.bind(this),
- })
- }
-
- static async isSupported(config: VideoEncoderConfig) {
- // Check if we support a specific codec family
- const short = config.codec.substring(0, 4)
- if (!SUPPORTED.includes(short)) return false
-
- // Default to hardware encoding
- config.hardwareAcceleration ??= "prefer-hardware"
-
- // Default to CBR
- config.bitrateMode ??= "constant"
-
- // Default to realtime encoding
- config.latencyMode ??= "realtime"
-
- const res = await VideoEncoder.isConfigSupported(config)
- return !!res.supported
- }
-
- async decoderConfig(): Promise {
- return await this.#decoderConfig.promise
- }
-
- #start(controller: TransformStreamDefaultController) {
- this.#encoder = new VideoEncoder({
- output: (frame, metadata) => {
- this.#enqueue(controller, frame, metadata)
- },
- error: (err) => {
- this.#decoderConfig.reject(err)
- throw err
- },
- })
-
- this.#encoder.configure(this.#encoderConfig)
- }
-
- #transform(frame: VideoFrame) {
- const encoder = this.#encoder
-
- // Set keyFrame to undefined when we're not sure so the encoder can decide.
- encoder.encode(frame, { keyFrame: this.#keyframeNext })
- this.#keyframeNext = undefined
-
- frame.close()
- }
-
- #enqueue(
- controller: TransformStreamDefaultController,
- frame: EncodedVideoChunk,
- metadata?: EncodedVideoChunkMetadata,
- ) {
- if (this.#decoderConfig.pending) {
- const config = metadata?.decoderConfig
- if (!config) throw new Error("missing decoder config")
- this.#decoderConfig.resolve(config)
- }
-
- if (frame.type === "key") {
- this.#keyframeCounter = 0
- } else {
- this.#keyframeCounter += 1
- const framesPerGop = this.#encoderConfig.framerate ? 2 * this.#encoderConfig.framerate : 60
- if (this.#keyframeCounter + this.#encoder.encodeQueueSize >= framesPerGop) {
- this.#keyframeNext = true
- }
- }
-
- controller.enqueue(frame)
- }
-
- #flush() {
- this.#encoder.close()
- }
-
- get config() {
- return this.#encoderConfig
- }
-}
diff --git a/packages/moq/karp/catalog/audio.ts b/packages/moq/karp/catalog/audio.ts
deleted file mode 100644
index 00738479..00000000
--- a/packages/moq/karp/catalog/audio.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { type Track, decodeTrack } from "./track"
-
-export interface Audio {
- track: Track
- codec: string
- sample_rate: number
- channel_count: number
- bitrate?: number
-}
-
-export function decodeAudio(o: unknown): o is Audio {
- if (typeof o !== "object" || o === null) return false
-
- const obj = o as Partial
- if (!decodeTrack(obj.track)) return false
- if (typeof obj.codec !== "string") return false
- if (typeof obj.sample_rate !== "number") return false
- if (typeof obj.channel_count !== "number") return false
- return true
-}
diff --git a/packages/moq/karp/catalog/broadcast.ts b/packages/moq/karp/catalog/broadcast.ts
deleted file mode 100644
index dca77336..00000000
--- a/packages/moq/karp/catalog/broadcast.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import * as Transfork from "../../transfork"
-import { type Audio, decodeAudio } from "./audio"
-import { type Video, decodeVideo } from "./video"
-
-export interface Broadcast {
- path: string[]
- video: Video[]
- audio: Audio[]
-}
-
-export function encode(catalog: Broadcast): Uint8Array {
- const encoder = new TextEncoder()
- console.debug("encoding catalog", catalog)
- const str = JSON.stringify(catalog)
- return encoder.encode(str)
-}
-
-export function decode(path: string[], raw: Uint8Array): Broadcast {
- const decoder = new TextDecoder()
- const str = decoder.decode(raw)
-
- const catalog = JSON.parse(str)
- if (!decodeBroadcast(catalog)) {
- console.error("invalid catalog", catalog)
- throw new Error("invalid catalog")
- }
-
- catalog.path = path
- return catalog
-}
-
-export async function fetch(connection: Transfork.Connection, path: string[]): Promise {
- const track = new Transfork.Track(path.concat("catalog.json"), 0)
- const sub = await connection.subscribe(track)
- try {
- const segment = await sub.nextGroup()
- if (!segment) throw new Error("no catalog data")
-
- const frame = await segment.readFrame()
- if (!frame) throw new Error("no catalog frame")
-
- segment.close()
- return decode(path, frame)
- } finally {
- sub.close()
- }
-}
-
-export function decodeBroadcast(o: unknown): o is Broadcast {
- if (typeof o !== "object" || o === null) return false
-
- const catalog = o as Partial
- if (catalog.audio === undefined) catalog.audio = []
- if (!Array.isArray(catalog.audio)) return false
- if (!catalog.audio.every((track: unknown) => decodeAudio(track))) return false
-
- if (catalog.video === undefined) catalog.video = []
- if (!Array.isArray(catalog.video)) return false
- if (!catalog.video.every((track: unknown) => decodeVideo(track))) return false
-
- return true
-}
diff --git a/packages/moq/karp/catalog/index.ts b/packages/moq/karp/catalog/index.ts
deleted file mode 100644
index b7ee4699..00000000
--- a/packages/moq/karp/catalog/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { Audio } from "./audio"
-import { type Broadcast, decode, encode, fetch } from "./broadcast"
-import type { Track } from "./track"
-import type { Video } from "./video"
-
-export type { Audio, Video, Track, Broadcast }
-export { encode, decode, fetch }
diff --git a/packages/moq/karp/catalog/track.ts b/packages/moq/karp/catalog/track.ts
deleted file mode 100644
index d32b1922..00000000
--- a/packages/moq/karp/catalog/track.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export type GroupOrder = "desc" | "asc"
-
-export interface Track {
- name: string
- priority: number
-}
-
-export function decodeTrack(o: unknown): o is Track {
- if (typeof o !== "object" || o === null) return false
-
- const obj = o as Partial
- if (typeof obj.name !== "string") return false
- if (typeof obj.priority !== "number") return false
- return true
-}
diff --git a/packages/moq/karp/catalog/video.ts b/packages/moq/karp/catalog/video.ts
deleted file mode 100644
index 2a803f5e..00000000
--- a/packages/moq/karp/catalog/video.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import * as Hex from "../../common/hex"
-import { type Track, decodeTrack } from "./track"
-
-export interface Video {
- track: Track
- codec: string
- description?: Uint8Array
- bitrate?: number
- frame_rate?: number
- resolution: Dimensions
-}
-
-export interface Dimensions {
- width: number
- height: number
-}
-
-export function decodeVideo(o: unknown): o is Video {
- if (typeof o !== "object" || o === null) return false
-
- const obj = o as Partial
- if (!decodeTrack(obj.track)) return false
- if (typeof obj.codec !== "string") return false
- if (typeof obj.description !== "string") return false
-
- obj.description = Hex.decode(obj.description)
-
- return true
-}
diff --git a/packages/moq/karp/frame.ts b/packages/moq/karp/frame.ts
deleted file mode 100644
index dcd6e7ab..00000000
--- a/packages/moq/karp/frame.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import type { Group, GroupReader } from "../transfork/model"
-import { setVint62 } from "../transfork/stream"
-
-export type FrameType = "key" | "delta"
-
-export class Frame {
- type: FrameType
- timestamp: number
- data: Uint8Array
-
- constructor(type: FrameType, timestamp: number, data: Uint8Array) {
- this.type = type
- this.timestamp = timestamp
- this.data = data
- }
-
- static async decode(group: GroupReader): Promise {
- const kind = group.index === 0 ? "key" : "delta"
- const payload = await group.readFrame()
- if (!payload) {
- return undefined
- }
-
- const [timestamp, data] = decode_timestamp(payload)
- return new Frame(kind, timestamp, data)
- }
-
- encode(group: Group) {
- if ((group.length === 0) !== (this.type === "key")) {
- throw new Error(`invalid ${this.type} position`)
- }
-
- let frame = new Uint8Array(8 + this.data.byteLength)
- const size = setVint62(frame, BigInt(this.timestamp)).byteLength
- frame.set(this.data, size)
- frame = new Uint8Array(frame.buffer, 0, this.data.byteLength + size)
-
- group.writeFrame(frame)
- }
-}
-
-// QUIC VarInt
-function decode_timestamp(buf: Uint8Array): [number, Uint8Array] {
- const size = 1 << ((buf[0] & 0xc0) >> 6)
-
- const view = new DataView(buf.buffer, buf.byteOffset, size)
- const remain = new Uint8Array(buf.buffer, buf.byteOffset + size, buf.byteLength - size)
- let v: number
-
- if (size === 1) {
- v = buf[0] & 0x3f
- } else if (size === 2) {
- v = view.getInt16(0) & 0x3fff
- } else if (size === 4) {
- v = view.getUint32(0) & 0x3fffffff
- } else if (size === 8) {
- // NOTE: Precision loss above 2^52
- v = Number(view.getBigUint64(0) & 0x3fffffffffffffffn)
- } else {
- throw new Error("impossible")
- }
-
- return [v, remain]
-}
diff --git a/packages/moq/karp/tsconfig.json b/packages/moq/karp/tsconfig.json
deleted file mode 100644
index 99227964..00000000
--- a/packages/moq/karp/tsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "include": ["."],
- "compilerOptions": {},
- "references": [
- {
- "path": "../transfork"
- },
- {
- "path": "../common"
- }
- ]
-}
diff --git a/packages/moq/package.json b/packages/moq/package.json
deleted file mode 100644
index 09f2568e..00000000
--- a/packages/moq/package.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "@nestri/libmoq",
- "type": "module",
- "version": "0.1.4",
- "description": "Media over QUIC library",
- "license": "(MIT OR Apache-2.0)",
- "repository": "github:kixelated/moq-js",
- "scripts": {
- "build": "tsc -b && cp ../LICENSE* ./dist && cp ./README.md ./dist && cp ./package.json ./dist",
- "check": "biome check",
- "fix": "biome check --write"
- },
- "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"
- }
-}
diff --git a/packages/moq/playback/audio.ts b/packages/moq/playback/audio.ts
deleted file mode 100644
index 5f0565a8..00000000
--- a/packages/moq/playback/audio.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-///
-
-import { Ring, RingShared } from "../common/ring"
-import type * as Catalog from "../karp/catalog"
-import type { Frame } from "../karp/frame"
-import type { Component } from "./timeline"
-
-// This is a non-standard way of importing worklet/workers.
-// Unfortunately, it's the only option because of a Vite bug: https://github.com/vitejs/vite/issues/11823
-import workletURL from "./worklet/index.ts?worker&url"
-
-export class Renderer {
- #context: AudioContext
- #worklet: Promise
-
- #ring: Ring
- #ringShared: RingShared
-
- #timeline: Component
- #track: Catalog.Audio
-
- #decoder!: AudioDecoder
- #stream: TransformStream
-
- constructor(track: Catalog.Audio, timeline: Component) {
- this.#track = track
- this.#context = new AudioContext({
- latencyHint: "interactive",
- sampleRate: track.sample_rate,
- })
-
- this.#worklet = this.load(track)
-
- this.#timeline = timeline
- this.#ringShared = new RingShared(2, track.sample_rate / 10) // 100ms
- this.#ring = new Ring(this.#ringShared)
-
- this.#stream = new TransformStream({
- start: this.#start.bind(this),
- transform: this.#transform.bind(this),
- })
-
- this.#run().catch((err) => console.error("failed to run audio renderer: ", err))
- }
-
- private async load(catalog: Catalog.Audio): Promise {
- // Load the worklet source code.
- await this.#context.audioWorklet.addModule(workletURL)
-
- const volume = this.#context.createGain()
- volume.gain.value = 2.0
-
- // Create the worklet
- const worklet = new AudioWorkletNode(this.#context, "renderer")
-
- worklet.port.addEventListener("message", this.on.bind(this))
- worklet.onprocessorerror = (e: Event) => {
- console.error("Audio worklet error:", e)
- }
-
- // Connect the worklet to the volume node and then to the speakers
- worklet.connect(volume)
- volume.connect(this.#context.destination)
-
- const config = {
- sampleRate: catalog.sample_rate,
- channelCount: catalog.channel_count,
- ring: this.#ringShared,
- }
-
- worklet.port.postMessage({ config })
-
- return worklet
- }
-
- private on(_event: MessageEvent) {
- // TODO
- }
-
- play() {
- this.#context.resume().catch((err) => console.warn("failed to resume audio context: ", err))
- }
-
- close() {
- this.#context.close().catch((err) => console.warn("failed to close audio context: ", err))
- }
-
- #start(controller: TransformStreamDefaultController) {
- this.#decoder = new AudioDecoder({
- output: (frame: AudioData) => {
- controller.enqueue(frame)
- },
- error: console.warn,
- })
-
- // We only support OPUS right now which doesn't need a description.
- this.#decoder.configure({
- codec: this.#track.codec,
- sampleRate: this.#track.sample_rate,
- numberOfChannels: this.#track.channel_count,
- })
- }
-
- #transform(frame: Frame) {
- const chunk = new EncodedAudioChunk({
- type: frame.type,
- timestamp: frame.timestamp,
- data: frame.data,
- })
-
- this.#decoder.decode(chunk)
- }
-
- async #run() {
- const reader = this.#timeline.frames.pipeThrough(this.#stream).getReader()
-
- for (;;) {
- const { value: frame, done } = await reader.read()
- if (done) break
-
- // Write audio samples to the ring buffer, dropping when there's no space.
- const written = this.#ring.write(frame)
-
- if (written < frame.numberOfFrames) {
- /*
- console.warn(
- `droppped ${frame.numberOfFrames - written} audio samples`,
- );
- */
- }
- }
- }
-}
diff --git a/packages/moq/playback/broadcast.ts b/packages/moq/playback/broadcast.ts
deleted file mode 100644
index 690572f6..00000000
--- a/packages/moq/playback/broadcast.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import type * as Catalog from "../karp/catalog"
-import type { Connection } from "../transfork/connection"
-
-import { Track } from "../transfork"
-
-import { Frame } from "../karp/frame"
-import type { GroupReader } from "../transfork/model"
-import * as Audio from "./audio"
-import { Timeline } from "./timeline"
-import * as Video from "./video"
-
-// This class must be created on the main thread due to AudioContext.
-export class Broadcast {
- #connection: Connection
- #catalog: Catalog.Broadcast
-
- // Running is a promise that resolves when the player is closed.
- // #close is called with no error, while #abort is called with an error.
- #running: Promise
-
- // Timeline receives samples, buffering them and choosing the timestamp to render.
- #timeline = new Timeline()
-
- #audio?: Audio.Renderer
- #video?: Video.Renderer
-
- constructor(connection: Connection, catalog: Catalog.Broadcast, canvas: HTMLCanvasElement) {
- this.#connection = connection
- this.#catalog = catalog
-
- const running = []
-
- // Only configure audio is we have an audio track
- const audio = (catalog.audio || []).at(0)
- if (audio) {
- this.#audio = new Audio.Renderer(audio, this.#timeline.audio)
- running.push(this.#runAudio(audio))
- }
-
- const video = (catalog.video || []).at(0)
- if (video) {
- this.#video = new Video.Renderer(video, canvas, this.#timeline.video)
- running.push(this.#runVideo(video))
- }
-
- // Async work
- this.#running = Promise.race([...running])
- }
-
- async #runAudio(audio: Catalog.Audio) {
- const track = new Track(this.#catalog.path.concat(audio.track.name), audio.track.priority)
- const sub = await this.#connection.subscribe(track)
-
- try {
- for (;;) {
- const group = await Promise.race([sub.nextGroup(), this.#running])
- if (!group) break
-
- this.#runAudioGroup(audio, group)
- .catch(() => {})
- .finally(() => group.close())
- }
- } finally {
- sub.close()
- }
- }
-
- async #runVideo(video: Catalog.Video) {
- const track = new Track(this.#catalog.path.concat(video.track.name), video.track.priority)
- const sub = await this.#connection.subscribe(track)
-
- try {
- for (;;) {
- const group = await Promise.race([sub.nextGroup(), this.#running])
- if (!group) break
-
- this.#runVideoGroup(video, group)
- .catch(() => {})
- .finally(() => group.close())
- }
- } finally {
- sub.close()
- }
- }
-
- async #runAudioGroup(audio: Catalog.Audio, group: GroupReader) {
- const timeline = this.#timeline.audio
-
- // Create a queue that will contain each frame
- const queue = new TransformStream ({})
- const segment = queue.writable.getWriter()
-
- // Add the segment to the timeline
- const segments = timeline.segments.getWriter()
- await segments.write({
- sequence: group.id,
- frames: queue.readable,
- })
- segments.releaseLock()
-
- // Read each chunk, decoding the MP4 frames and adding them to the queue.
- for (;;) {
- const frame = await Frame.decode(group)
- if (!frame) break
-
- await segment.write(frame)
- }
-
- // We done.
- await segment.close()
- }
-
- async #runVideoGroup(video: Catalog.Video, group: GroupReader) {
- const timeline = this.#timeline.video
-
- // Create a queue that will contain each MP4 frame.
- const queue = new TransformStream ({})
- const segment = queue.writable.getWriter()
-
- // Add the segment to the timeline
- const segments = timeline.segments.getWriter()
- await segments.write({
- sequence: group.id,
- frames: queue.readable,
- })
- segments.releaseLock()
-
- for (;;) {
- const frame = await Frame.decode(group)
- if (!frame) break
-
- await segment.write(frame)
- }
-
- // We done.
- await segment.close()
- }
-
- unmute() {
- console.debug("unmuting audio")
- this.#audio?.play()
- }
-
- close() {
- this.#audio?.close()
- this.#video?.close()
- }
-}
diff --git a/packages/moq/playback/index.ts b/packages/moq/playback/index.ts
deleted file mode 100644
index 68cc5738..00000000
--- a/packages/moq/playback/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { Player } from "./player"
-export type { PlayerConfig } from "./player"
diff --git a/packages/moq/playback/player.ts b/packages/moq/playback/player.ts
deleted file mode 100644
index b7ba1c61..00000000
--- a/packages/moq/playback/player.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import * as Catalog from "../karp/catalog"
-import type { Connection } from "../transfork/connection"
-import { Broadcast } from "./broadcast"
-
-export interface PlayerConfig {
- connection: Connection
- path: string[]
- canvas: HTMLCanvasElement
-}
-
-// This class must be created on the main thread due to AudioContext.
-export class Player {
- #config: PlayerConfig
- #running: Promise
- #active?: Broadcast
-
- constructor(config: PlayerConfig) {
- this.#config = config
- this.#running = this.#run()
- }
-
- async #run() {
- const announced = await this.#config.connection.announced(this.#config.path)
-
- let activeId = -1
-
- for (;;) {
- const announce = await announced.next()
- if (!announce) break
-
- if (announce.path.length === this.#config.path.length) {
- throw new Error("expected resumable broadcast")
- }
-
- const path = announce.path.slice(0, this.#config.path.length + 1)
-
- const id = Number.parseInt(path[path.length - 1])
- if (id <= activeId) continue
-
- const catalog = await Catalog.fetch(this.#config.connection, path)
-
- this.#active?.close()
- this.#active = new Broadcast(this.#config.connection, catalog, this.#config.canvas)
- activeId = id
- }
-
- this.#active?.close()
- }
-
- close() {
- this.#config.connection.close()
- this.#active?.close()
- this.#active = undefined
- }
-
- async closed() {
- await Promise.any([this.#running, this.#config.connection.closed()])
- }
-
- unmute() {
- this.#active?.unmute()
- }
-}
diff --git a/packages/moq/playback/timeline.ts b/packages/moq/playback/timeline.ts
deleted file mode 100644
index 49cfafe3..00000000
--- a/packages/moq/playback/timeline.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-import type { Frame } from "../karp/frame"
-
-export interface Range {
- start: number
- end: number
-}
-
-export class Timeline {
- // Maintain audio and video seprarately
- audio: Component
- video: Component
-
- // Construct a timeline
- constructor() {
- this.audio = new Component()
- this.video = new Component()
- }
-}
-
-interface Segment {
- sequence: number
- frames: ReadableStream
-}
-
-export class Component {
- #current?: Segment
-
- frames: ReadableStream
- #segments: TransformStream
-
- constructor() {
- this.frames = new ReadableStream({
- pull: this.#pull.bind(this),
- cancel: this.#cancel.bind(this),
- })
-
- // This is a hack to have an async channel with 100 items.
- this.#segments = new TransformStream({}, { highWaterMark: 100 })
- }
-
- get segments() {
- return this.#segments.writable
- }
-
- async #pull(controller: ReadableStreamDefaultController ) {
- for (;;) {
- // Get the next segment to render.
- const segments = this.#segments.readable.getReader()
-
- let res: ReadableStreamReadResult | ReadableStreamReadResult
- if (this.#current) {
- // Get the next frame to render.
- const frames = this.#current.frames.getReader()
-
- // Wait for either the frames or segments to be ready.
- // NOTE: This assume that the first promise gets priority.
- res = await Promise.race([frames.read(), segments.read()])
-
- frames.releaseLock()
- } else {
- res = await segments.read()
- }
-
- segments.releaseLock()
-
- const { value, done } = res
-
- if (done) {
- // We assume the current segment has been closed
- // TODO support the segments stream closing
- this.#current = undefined
- continue
- }
-
- if (!isSegment(value)) {
- // Return so the reader can decide when to get the next frame.
- controller.enqueue(value)
- return
- }
-
- // We didn't get any frames, and instead got a new segment.
- if (this.#current) {
- if (value.sequence < this.#current.sequence) {
- // Our segment is older than the current, abandon it.
- await value.frames.cancel("skipping segment; too old")
- continue
- }
-
- // Our segment is newer than the current, cancel the old one.
- await this.#current.frames.cancel("skipping segment; too slow")
- }
-
- this.#current = value
- }
- }
-
- async #cancel(reason: Error) {
- if (this.#current) {
- await this.#current.frames.cancel(reason)
- }
-
- const segments = this.#segments.readable.getReader()
- for (;;) {
- const { value: segment, done } = await segments.read()
- if (done) break
-
- await segment.frames.cancel(reason)
- }
- }
-}
-
-// Return if a type is a segment or frame
-function isSegment(value: Segment | Frame): value is Segment {
- return (value as Segment).frames !== undefined
-}
diff --git a/packages/moq/playback/tsconfig.json b/packages/moq/playback/tsconfig.json
deleted file mode 100644
index cfa267c2..00000000
--- a/packages/moq/playback/tsconfig.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "include": ["."],
- "exclude": ["./worklet"],
- "compilerOptions": {
- "types": ["dom-mediacapture-transform", "dom-webcodecs"]
- },
- "references": [
- {
- "path": "../common"
- },
- {
- "path": "../transfork"
- },
- {
- "path": "../karp"
- }
- ],
- "paths": {
- "@/*": ["*"]
- }
-}
diff --git a/packages/moq/playback/video.ts b/packages/moq/playback/video.ts
deleted file mode 100644
index 77218037..00000000
--- a/packages/moq/playback/video.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import type * as Catalog from "../karp/catalog"
-import type { Frame } from "../karp/frame"
-import type { Component } from "./timeline"
-
-export class Renderer {
- #track: Catalog.Video
- #canvas: HTMLCanvasElement
- #timeline: Component
-
- #decoder!: VideoDecoder
- #queue: TransformStream
-
- constructor(track: Catalog.Video, canvas: HTMLCanvasElement, timeline: Component) {
- this.#track = track
- this.#canvas = canvas
- this.#timeline = timeline
-
- this.#queue = new TransformStream({
- start: this.#start.bind(this),
- transform: this.#transform.bind(this),
- })
-
- this.#run().catch((err) => console.error("failed to run video renderer: ", err))
- }
-
- close() {
- // TODO
- }
-
- async #run() {
- const reader = this.#timeline.frames.pipeThrough(this.#queue).getReader()
- for (;;) {
- const { value: frame, done } = await reader.read()
- if (done) break
-
- self.requestAnimationFrame(() => {
- this.#canvas.width = frame.displayWidth
- this.#canvas.height = frame.displayHeight
-
- const ctx = this.#canvas.getContext("2d")
- if (!ctx) throw new Error("failed to get canvas context")
-
- ctx.drawImage(frame, 0, 0, frame.displayWidth, frame.displayHeight) // TODO respect aspect ratio
- frame.close()
- })
- }
- }
-
- #start(controller: TransformStreamDefaultController) {
- this.#decoder = new VideoDecoder({
- output: (frame: VideoFrame) => {
- controller.enqueue(frame)
- },
- error: console.error,
- })
-
- this.#decoder.configure({
- codec: this.#track.codec,
- codedHeight: this.#track.resolution.height,
- codedWidth: this.#track.resolution.width,
- description: this.#track.description,
- optimizeForLatency: true,
- })
- }
-
- #transform(frame: Frame) {
- const chunk = new EncodedVideoChunk({
- type: frame.type,
- data: frame.data,
- timestamp: frame.timestamp,
- })
-
- this.#decoder.decode(chunk)
- }
-}
diff --git a/packages/moq/playback/worklet/index.ts b/packages/moq/playback/worklet/index.ts
deleted file mode 100644
index bb07a6c7..00000000
--- a/packages/moq/playback/worklet/index.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-// TODO add support for @/ to avoid relative imports
-import { Ring } from "../../common/ring"
-import type * as Message from "./message"
-
-class Renderer extends AudioWorkletProcessor {
- ring?: Ring
- base: number
-
- constructor() {
- // The super constructor call is required.
- super()
-
- this.base = 0
- this.port.onmessage = this.onMessage.bind(this)
- }
-
- onMessage(e: MessageEvent) {
- const msg = e.data as Message.From
- if (msg.config) {
- this.onConfig(msg.config)
- }
- }
-
- onConfig(config: Message.Config) {
- this.ring = new Ring(config.ring)
- }
-
- // Inputs and outputs in groups of 128 samples.
- process(_inputs: Float32Array[][], outputs: Float32Array[][], _parameters: Record): boolean {
- if (!this.ring) {
- // Paused
- return true
- }
-
- if (outputs.length !== 1) {
- throw new Error("only a single track is supported")
- }
-
- if (this.ring.size() === this.ring.capacity) {
- // This is a hack to clear any latency in the ring buffer.
- // The proper solution is to play back slightly faster?
- console.warn("resyncing ring buffer")
- this.ring.clear()
- return true
- }
-
- const output = outputs[0]
-
- const size = this.ring.read(output)
- if (size < output.length) {
- // TODO trigger rebuffering event
- }
-
- return true
- }
-}
-
-registerProcessor("renderer", Renderer)
diff --git a/packages/moq/playback/worklet/message.ts b/packages/moq/playback/worklet/message.ts
deleted file mode 100644
index 02fe1389..00000000
--- a/packages/moq/playback/worklet/message.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import type { RingShared } from "../../common/ring"
-
-export interface From {
- config?: Config
-}
-
-export interface Config {
- channels: number
- sampleRate: number
- ring: RingShared
-}
diff --git a/packages/moq/playback/worklet/tsconfig.json b/packages/moq/playback/worklet/tsconfig.json
deleted file mode 100644
index 77c5a718..00000000
--- a/packages/moq/playback/worklet/tsconfig.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "extends": "../../tsconfig.json",
- "include": ["."],
- "exclude": ["./index"],
- "compilerOptions": {
- "lib": ["es2022"],
- "types": ["audioworklet"]
- },
- "references": [
- {
- "path": "../../common"
- }
- ]
-}
diff --git a/packages/moq/sst-env.d.ts b/packages/moq/sst-env.d.ts
deleted file mode 100644
index b6a7e906..00000000
--- a/packages/moq/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/moq/transfork/client.ts b/packages/moq/transfork/client.ts
deleted file mode 100644
index 345483cf..00000000
--- a/packages/moq/transfork/client.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import * as Hex from "../common/hex"
-import { Connection } from "./connection"
-import * as Message from "./message"
-import { Stream } from "./stream"
-
-export interface ClientConfig {
- url: string
-
- // If set, the server fingerprint will be fetched from this URL.
- // This is required to use self-signed certificates with Chrome (May 2023)
- fingerprint?: string
-}
-
-export class Client {
- #fingerprint: Promise
-
- readonly config: ClientConfig
-
- constructor(config: ClientConfig) {
- this.config = config
-
- this.#fingerprint = this.#fetchFingerprint(config.fingerprint).catch((e) => {
- console.warn("failed to fetch fingerprint: ", e)
- return undefined
- })
- }
-
- async connect(): Promise {
- // Helper function to make creating a promise easier
- const options: WebTransportOptions = {}
-
- const fingerprint = await this.#fingerprint
- if (fingerprint) options.serverCertificateHashes = [fingerprint]
-
- const quic = new WebTransport(this.config.url, options)
- await quic.ready
-
- const client = new Message.SessionClient([Message.Version.FORK_02])
- const stream = await Stream.open(quic, client)
-
- const server = await Message.SessionServer.decode(stream.reader)
- if (server.version !== Message.Version.FORK_02) {
- throw new Error(`unsupported server version: ${server.version}`)
- }
-
- console.log(`established connection: version=${server.version}`)
-
- return new Connection(quic, stream)
- }
-
- async #fetchFingerprint(url?: string): Promise {
- if (!url) return
-
- // TODO remove this fingerprint when Chrome WebTransport accepts the system CA
- const response = await fetch(url)
- const bytes = Hex.decode(await response.text())
-
- return {
- algorithm: "sha-256",
- value: bytes,
- }
- }
-}
diff --git a/packages/moq/transfork/connection.ts b/packages/moq/transfork/connection.ts
deleted file mode 100644
index 8c0b51b8..00000000
--- a/packages/moq/transfork/connection.ts
+++ /dev/null
@@ -1,158 +0,0 @@
-import { asError } from "../common/error"
-import * as Message from "./message"
-import { Reader, Stream } from "./stream"
-
-import type { Queue } from "../common/async"
-import { Closed } from "./error"
-import type { Track, TrackReader } from "./model"
-import { Publisher } from "./publisher"
-import { type Announced, Subscriber } from "./subscriber"
-
-export class Connection {
- // The established WebTransport session.
- #quic: WebTransport
-
- // Use to receive/send session messages.
- #session: Stream
-
- // Module for contributing tracks.
- #publisher: Publisher
-
- // Module for distributing tracks.
- #subscriber: Subscriber
-
- // Async work running in the background
- #running: Promise
-
- constructor(quic: WebTransport, session: Stream) {
- this.#quic = quic
- this.#session = session
-
- this.#publisher = new Publisher(this.#quic)
- this.#subscriber = new Subscriber(this.#quic)
-
- this.#running = this.#run()
- }
-
- close(code = 0, reason = "") {
- this.#quic.close({ closeCode: code, reason })
- }
-
- async #run(): Promise {
- const session = this.#runSession().catch((err) => new Error("failed to run session: ", err))
- const bidis = this.#runBidis().catch((err) => new Error("failed to run bidis: ", err))
- const unis = this.#runUnis().catch((err) => new Error("failed to run unis: ", err))
-
- await Promise.all([session, bidis, unis])
- }
-
- publish(track: TrackReader) {
- this.#publisher.publish(track)
- }
-
- async announced(prefix: string[] = []): Promise> {
- return this.#subscriber.announced(prefix)
- }
-
- async subscribe(track: Track): Promise {
- return await this.#subscriber.subscribe(track)
- }
-
- async #runSession() {
- // Receive messages until the connection is closed.
- for (;;) {
- const msg = await Message.SessionInfo.decode_maybe(this.#session.reader)
- if (!msg) break
- // TODO use the session info
- }
- }
-
- async #runBidis() {
- for (;;) {
- const next = await Stream.accept(this.#quic)
- if (!next) {
- break
- }
-
- const [msg, stream] = next
- this.#runBidi(msg, stream).catch((err) => stream.writer.reset(Closed.extract(err)))
- }
- }
-
- async #runBidi(msg: Message.Bi, stream: Stream) {
- console.debug("received bi stream: ", msg)
-
- if (msg instanceof Message.SessionClient) {
- throw new Error("duplicate session stream")
- }
-
- if (msg instanceof Message.AnnounceInterest) {
- if (!this.#subscriber) {
- throw new Error("not a subscriber")
- }
-
- return await this.#publisher.runAnnounce(msg, stream)
- }
- if (msg instanceof Message.Subscribe) {
- if (!this.#publisher) {
- throw new Error("not a publisher")
- }
-
- return await this.#publisher.runSubscribe(msg, stream)
- }
- if (msg instanceof Message.Datagrams) {
- if (!this.#publisher) {
- throw new Error("not a publisher")
- }
-
- return await this.#publisher.runDatagrams(msg, stream)
- }
- if (msg instanceof Message.Fetch) {
- if (!this.#publisher) {
- throw new Error("not a publisher")
- }
-
- return await this.#publisher.runFetch(msg, stream)
- }
- if (msg instanceof Message.InfoRequest) {
- if (!this.#publisher) {
- throw new Error("not a publisher")
- }
-
- return await this.#publisher.runInfo(msg, stream)
- }
- }
-
- async #runUnis() {
- for (;;) {
- const next = await Reader.accept(this.#quic)
- if (!next) {
- break
- }
-
- const [msg, stream] = next
- this.#runUni(msg, stream).catch((err) => stream.stop(Closed.extract(err)))
- }
- }
-
- async #runUni(msg: Message.Uni, stream: Reader) {
- console.debug("received uni stream: ", msg)
-
- if (msg instanceof Message.Group) {
- if (!this.#subscriber) {
- throw new Error("not a subscriber")
- }
-
- return this.#subscriber.runGroup(msg, stream)
- }
- }
-
- async closed(): Promise {
- try {
- await this.#running
- return new Error("closed")
- } catch (e) {
- return asError(e)
- }
- }
-}
diff --git a/packages/moq/transfork/error.ts b/packages/moq/transfork/error.ts
deleted file mode 100644
index e9be92af..00000000
--- a/packages/moq/transfork/error.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export class Closed extends Error {
- readonly code?: number
-
- constructor(code?: number) {
- super(`closed code=${code}`)
- this.code = code
- }
-
- static from(err: unknown): Closed {
- return new Closed(Closed.extract(err))
- }
-
- static extract(err: unknown): number {
- if (err instanceof WebTransportError && err.streamErrorCode !== null) {
- return err.streamErrorCode
- }
-
- return 0
- }
-}
diff --git a/packages/moq/transfork/frame.ts b/packages/moq/transfork/frame.ts
deleted file mode 100644
index 5b22ac76..00000000
--- a/packages/moq/transfork/frame.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import type { Reader, Writer } from "./stream"
-
-export class FrameReader {
- #stream: Reader
-
- constructor(stream: Reader) {
- this.#stream = stream
- }
-
- // Returns the next frame
- async read(): Promise {
- if (await this.#stream.done()) return
-
- const size = await this.#stream.u53()
- const payload = await this.#stream.read(size)
-
- return payload
- }
-
- async stop(code: number) {
- await this.#stream.stop(code)
- }
-}
-
-export class FrameWriter {
- #stream: Writer
-
- constructor(stream: Writer) {
- this.#stream = stream
- }
-
- // Writes the next frame
- async write(payload: Uint8Array) {
- await this.#stream.u53(payload.byteLength)
- await this.#stream.write(payload)
- }
-
- async close() {
- await this.#stream.close()
- }
-
- async reset(code: number) {
- await this.#stream.reset(code)
- }
-}
diff --git a/packages/moq/transfork/index.ts b/packages/moq/transfork/index.ts
deleted file mode 100644
index 343da3e5..00000000
--- a/packages/moq/transfork/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export { Client } from "./client"
-export type { ClientConfig } from "./client"
-
-export { Connection } from "./connection"
-
-export { Track, Group } from "./model"
-export { Announced } from "./subscriber"
diff --git a/packages/moq/transfork/message.ts b/packages/moq/transfork/message.ts
deleted file mode 100644
index 880ed063..00000000
--- a/packages/moq/transfork/message.ts
+++ /dev/null
@@ -1,428 +0,0 @@
-import type { Reader, Writer } from "./stream"
-
-export enum Version {
- DRAFT_00 = 0xff000000,
- DRAFT_01 = 0xff000001,
- DRAFT_02 = 0xff000002,
- DRAFT_03 = 0xff000003,
- FORK_00 = 0xff0bad00,
- FORK_01 = 0xff0bad01,
- FORK_02 = 0xff0bad02,
-}
-
-export class Extensions {
- entries: Map
-
- constructor() {
- this.entries = new Map()
- }
-
- set(id: bigint, value: Uint8Array) {
- this.entries.set(id, value)
- }
-
- get(id: bigint): Uint8Array | undefined {
- return this.entries.get(id)
- }
-
- remove(id: bigint): Uint8Array | undefined {
- const value = this.entries.get(id)
- this.entries.delete(id)
- return value
- }
-
- async encode(w: Writer) {
- await w.u53(this.entries.size)
- for (const [id, value] of this.entries) {
- await w.u62(id)
- await w.u53(value.length)
- await w.write(value)
- }
- }
-
- static async decode(r: Reader): Promise